Linux学习笔记-bash(鸟哥11章 老段视频笔记)
2017-03-26 20:44
239 查看
11章shell
打开终端的时候会链接到一个shell中,即链接到shell进程中。
Shell 类型
直接输入名字可以直接切换
[远程桌面传播的是图片]
查找命令所在的路径
/bin/ls #ls是在/bin目录下的
cd is a shell builtin
cd是shell内置的命令。不能使用which进行查看。可以使用type查看类型
本地变量,在子shell无效。
环境变量,会影响子shell
变量名:不能以数字开头,由字母、数字、_ 组成
取消变量:
查看变量
输出变量
输出第12个参数:
0表示脚本文件名字# 表示参数格个数
$* 表示所有参数
命令行中:
HOME当前用户家目录,登陆时赋值USER 当前用户名
HISTFILESIZEhistory可以保存的命令数PS1 输入命令的前面那个[root@www ~]
PS2还行输入命令的提示符>LANG 默认编码
数组array
xx=(aa bb cc dd)
echo ${xx[0]} 输出aa
echo ${xx[@|*]} 查看所有元素
echo ${!xx[@]} 查看下标
echo #{!xx[@]} 查看个数
delare
设置只读的变量
更好的变量引用方法: echo ${xx}
嵌套命令的执行
判断变量是否存在:
alias aa=”ifconfig eth0” 给ifconfig eth0起个简称
unalias aa
快速调用历史命令
清除历史命令 history -c
!echo是命令。,也是一个别名,到底执行的哪一个呢?
可以通过
echo is aliased to `echo -n’
echo is a shell builtin
echo is /bin/echo
【-d 指明当前日期】
登陆后信息
通过talnet登陆的提示信息
登陆时候使用的shell
会执行以下脚本
/etc/profile 环境中的所有全局变量
/etc/profile.d 别名的设置
/etc/inputrc 快捷键设置
进入用户家目录 ~ 时候会执行 ~/.bash_profile
只对当前用户有效
no-login-shell 不需要输入密码登陆的shell
set
[]一对中括号匹配一个字符
[a-z] 匹配26个小写英文字母。
[a\-z]匹配 a,,z
> 将输出放到文件中, 覆盖(只能重定向错误的结果)
>> 追加(只能重定向正确的结果)
2> 错误结果去覆盖
2>> 追加错误结果
&> 正确错误全都重定向
输入重定向<
here文件中<< 设置输入结束字符。
可以任意写文档,一直到输入<< 右侧的符号结束
here可以识别变量
$? 记录命令正确(0)还是错误(非0)。
&& 与
|| 或
将ifconfig eth0的输出结果传给命令tee,结果保存到xx中,并将这个结果当成grep的输入
tee xx保存结果只保存最后一次,想要继续追加:
-d 指明分隔符:
-f 指明查看部分
grep 过滤
-i 忽略大小写
-n加行号
-v反向过滤,输出不含有关键字的行
-A3过滤关键字那一行,并过滤下面的3行
-a3过滤关键字那一行,并过滤上面的3行
-n按照数字形式排序,默认从小到大
-r从大到小排序
uniq
wc字符统计
输出:行号 单词数 字符数
wc -l xx 行号
wc -w xx 单词数
wc -c xx 字符数
统计一个文件夹有多少个目录
转换之后覆盖原文件:
错误做法:
删除tr -d
字符转换col,expand
^I 表示tab键 $表示一行结束
粘贴命令jion和paste
paste aa bb 将aa 和 bb 文件粘贴在一起
join 默认是空格作为分割符
aa bb
a123 a345
b123 b289
c123 a114
a123:345
b123:289
a123:114
分割文件 split
按块分割
按行分配文件
参数代换xargs
常和find结合
-减号作用
\是回车
shell的介绍
shell 对命令进行翻译。转移器。把命令翻译成cpu可以都懂的语言。打开终端的时候会链接到一个shell中,即链接到shell进程中。
Shell 类型
cat /etc/shells
直接输入名字可以直接切换
[远程桌面传播的是图片]
查找命令所在的路径
which ls
/bin/ls #ls是在/bin目录下的
type cd查看命令类型
cd is a shell builtin
cd是shell内置的命令。不能使用which进行查看。可以使用type查看类型
shell 变量
变量基础
声明变量:本地变量,在子shell无效。
变量名=值# ‘=’两边不要有空格
环境变量,会影响子shell
export yy=10
declare -x zz=10
变量名:不能以数字开头,由字母、数字、_ 组成
取消变量:
unset 变量名
declare +x zz环境变量变成本地变量
查看变量
set
env
export
export -p显示所有的环境变量
输出变量
输出第12个参数:
echo ${12}
特殊的变量
脚本中:0表示脚本文件名字# 表示参数格个数
$* 表示所有参数
命令行中:
HOME当前用户家目录,登陆时赋值USER 当前用户名
HISTFILESIZEhistory可以保存的命令数PS1 输入命令的前面那个[root@www ~]
PS2还行输入命令的提示符>LANG 默认编码
locale -a显示系统支持的编码
变量键盘读取,数组与声明
用read从键盘读取,脚本常使用echo "请输入您的名字" read name echo "欢迎您 $name" read -p "请输入您的名字" name read 88 echo $REPLY #输出88
数组array
xx=(aa bb cc dd)
echo ${xx[0]} 输出aa
echo ${xx[@|*]} 查看所有元素
echo ${!xx[@]} 查看下标
echo #{!xx[@]} 查看个数
delare
设置只读的变量
declare -r aa
readonly bb
更好的变量引用方法: echo ${xx}
xx=book echo '$xx' 直接输出字符串:$xx echo "$xx" 输出book echo "我买了10本${book}s" 输出:我买了10本books
嵌套命令的执行
echo "xxx`hostname`xxx" echo "xxx${hostname}xxx"
对文件系统及程序的限制关系 ulimit
ulimit -a #查看所有的大小限制 ulimit -f 20480 #设置创建文件大小限制20M
变量内容的删除、替代和替换
删除\
path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/bin:/usr/local/games" r=${path#*usr/bin} #从开头删除,删到第一个usr/bin echo $r #输出:/sbin:/bin:/usr/games:/usr/local/games:/usr/bin:/usr/local/games r=${path##*usr/bin} #从最后的usr/bin开始删,删到开头 echo $r #输出:/usr/local/games r=${path%bin*} #从最后一个开始往后删 echo $r #输出:前面没变化……/usr/ r=${path%%bin*} #从第一个bin往后删, echo $r #输出/usr/local/s
替换
删除变量unset xx
判断变量是否存在:
r=${XX-"AAAA"}xx存在则将xx赋给r,否则将AAAA赋给r
r=${XX:-"AAAA"}xx存在且不为空值则将xx赋给r,否则将AAAA赋给r
r=${XX:="AAAA"}xx存在且不为空值则将xx赋给r,否则将AAAA赋给r和xx
r=${XX:?"AAAA"}xx存在且不为空值则将xx赋给r,否则将AAAA输出
r=${XX:+"AAAA"}xx存在且不为空值则将AAAA赋给r
alias aa=”ifconfig eth0” 给ifconfig eth0起个简称
unalias aa
快速调用历史命令
!编号
清除历史命令 history -c
操作环境
命令环境
echo 输出自带换行符。echo -n xxxx本次输出舍弃换行符
alias echo='echo -n'以后的echo调用都没有换行符
!echo是命令。,也是一个别名,到底执行的哪一个呢?
可以通过
type -a echo进行查看,优先顺序从上到下
echo is aliased to `echo -n’
echo is a shell builtin
echo is /bin/echo
登陆前后信息
登陆前信息vim /etc/issue
【-d 指明当前日期】
登陆后信息
vim /etc/motd
通过talnet登陆的提示信息
vim /etc/issue.net
bash环境配置文件
login-shell和no-login-shell
login-shell登陆时候使用的shell
会执行以下脚本
/etc/profile 环境中的所有全局变量
/etc/profile.d 别名的设置
/etc/inputrc 快捷键设置
进入用户家目录 ~ 时候会执行 ~/.bash_profile
只对当前用户有效
no-login-shell 不需要输入密码登陆的shell
终端机环境设置
stty快捷键设置set
set -u开启检查变量是否被定义。
set +u关闭检查变量存在
set +x跟踪所有的操作
set -x提供更新功能
通配符
E.g. 找出文件名符合的文件:字母,数字,都可,非数字
ls [a-z][1-9]?[!0-9]*.mp3
[]一对中括号匹配一个字符
[a-z] 匹配26个小写英文字母。
[a\-z]匹配 a,,z
数据流重定向
输出重定向.所有的输出默认是输出在屏幕上。修改保存地址> 将输出放到文件中, 覆盖(只能重定向错误的结果)
>> 追加(只能重定向正确的结果)
2> 错误结果去覆盖
2>> 追加错误结果
&> 正确错误全都重定向
cal 2> hosts 1>&2正确的像错误的一样进行导入
xxx cal>hosts 2>&1错误的像正确的一样进行导入
输入重定向<
tr 'a-z' 'A-Z' < hosts
here文件中<< 设置输入结束字符。
可以任意写文档,一直到输入<< 右侧的符号结束
here可以识别变量
命令执行判断依据
分号; 顺序执行命令$? 记录命令正确(0)还是错误(非0)。
&& 与
|| 或
管道pipe
命令1 | 命令2 |命令3 将命令1执行结果最为命令2的执行参数ifconfig eth0 | tee xx |grep 'inet addr'
将ifconfig eth0的输出结果传给命令tee,结果保存到xx中,并将这个结果当成grep的输入
tee xx保存结果只保存最后一次,想要继续追加:
ifconfig eth0 | tee -a xx |grep 'inet addr'
选取命令
cut -d: -f 1 文件名
-d 指明分隔符:
-f 指明查看部分
grep 过滤
grep 选项 关键字 filename
grep -i tom passwd
-i 忽略大小写
-n加行号
-v反向过滤,输出不含有关键字的行
-A3过滤关键字那一行,并过滤下面的3行
-a3过滤关键字那一行,并过滤上面的3行
排序命令
sortsort -n -r
-n按照数字形式排序,默认从小到大
-r从大到小排序
sort -t: -k3 passwd-t指明分隔符,-k指明第几部分passwd的第三部分进行排序
sort -t -n: -k3 passwd-n以数字形式排序
sort -u-u去重
uniq
uniq去重排序,相当于sort -u
uniq -c统计重复出现的次数
wc字符统计
输出:行号 单词数 字符数
wc -l xx 行号
wc -w xx 单词数
wc -c xx 字符数
统计一个文件夹有多少个目录
ls -l / | wc -l
字符转换
字符转换trtr 'a-z' 'A-Z' < hosts
转换之后覆盖原文件:
tr 'a-z' 'A-Z' < hosts > xxx mv xxx hosts
错误做法:
tr 'a-z' 'A-Z' < hosts > hosts
这两个命令等同 tr 'a-z' 'A-Z' < host cat hosts | tr 'a-z' 'A-Z'
删除tr -d
cat passwd | tr -d ':'输出删除:的passwd
字符转换col,expand
tail -7 /etc/man.config | cat -A把符号显示出来
^I 表示tab键 $表示一行结束
tail -7 /etc/man.config | col -x把tab转成空格
tail -7 /etc/man.config | expand
粘贴命令jion和paste
paste aa bb 将aa 和 bb 文件粘贴在一起
join 默认是空格作为分割符
aa bb
a123 a345
b123 b289
c123 a114
join -t ":" aa bb-t指明分隔符
a123:345
b123:289
join -t ":" -1 1 aa -2 3 bb第1个文件的第一部分和第2个文件的第3部分join
a123:114
分割文件 split
按块分割
split -b 10k /etc/services xxx把/etc/services文件分成每份10k,以xxx开头命名
cat xxx* >services将文件重新组成service
按行分配文件
split -l 100 /etc/services xxx100行分配成一个文件
参数代换xargs
常和find结合
find -name 'file*'查找以file开头的文件
find -name 'file*' | xargs ls -l显示以file开头的文件的文件信息
-减号作用
tar cvf home.tar /home | tar xvf压缩生成home.tar并解压
tar cvf - /home | tar xvf -不生成home.tar压缩文件直接解压
补充
echo $$ 进入子shell\是回车
相关文章推荐
- Linux学习笔记-grep,sed,awk(鸟哥12章 老段视频笔记)
- 鸟哥的 Linux 私房菜第11章-认识与学习 BASH 学习笔记
- 跟着鸟哥学Linux系列笔记3-第11章BASH学习
- linux鸟哥视频学习笔记05
- 鸟哥的Linux学习笔记-bash
- 鸟哥的私房菜Linux 学习笔记之 Bash语法
- linux鸟哥视频学习笔记02
- 【鸟哥的linux私房菜-学习笔记】Linux 的启动流程分析
- 【linux学习笔记】 bash学习之变量内容的删除、取代与替换
- 跟着鸟哥学Linux系列笔记2-第10章VIM学习
- 转载自马哥视频学习笔记---Linux Web服务器网站故障分析常用的命令之awk用法的简单示例
- LinuxCast学习笔记三 BASH_Basic
- Linux学习笔记:bash的基础特性之变量
- 鸟哥linux基础版学习笔记——《第一部份 Linux 的规划与安装》
- Linux基础学习笔记之bash的快捷键
- 鸟哥的 Linux 私房菜第12章-正规表示法与文件格式化处理 学习笔记
- 【linux学习笔记】bash学习之login shell与non-login shell(source命令)
- 【鸟哥的linux私房菜-学习笔记】Linux的档案权限与目录配置
- 马哥linux学习笔记(bash变量配置)
- 鸟哥的Linux学习笔记之 一