Shell编程
一、echo输出命令
1. echo [选项] [输出内容]
2. -e:支持反斜杠控制的字符转换
二、将Windows格式转换成linux格式
1. dos2unix 文件名
三、别名
1. alias 别名=值
2. 修改/root/.bashrc
3. 删除别名:unalias 别名
四、输出重定向
A、标准输出重定向:
1. 命令 > 文件:以覆盖方式把命令的正确输出输出到指定文件或设备
2. 命令 >> 文件:以追加方式把命令.....
B、标准错误输出重定向:
1. 错误命令 2> 文件:以覆盖的方式,把命令的错误输出输出到指定的文件或设备
2. 错误命令 2>> 文件:以追加方式,把命令....
C、正确和输出同时保存:
1. 命令 > 文件 2>&1
2. 命令 >> 文件 2>&1
3. 命令 &> 文件
4. 命令 &>> 文件
5. 命令 >>文件1 2>>文件2:把正确的输出追加到文件1,把错误的输出追加到文件2
D、/dev/null:垃圾箱
五、输入重定向
A、wc 【选项名】 【文件名】
1. -c:统计字节数
2. -w:统计单词数
3. -l:统计行数
六、多命令顺序执行
A、; 命令1;命令2 多个命令顺序执行,命令之间没有任何逻辑联系
B、&& 命令1&&命令2 逻辑与,当命令1正确执行,则命令2才会执行,当命令1执行不正确,则命令2不会执行
C、|| 命令1||命令2 逻辑或,当命令1执行不正确命令2才会执行,当命令1正确执行,则命令2不会执行
D、dd if=输入文件 of=输出文件 bs=字节数 cout=个数
1. if=输入文件 指定源文件或源设备
2. of=输出文件 指定目标文件或目标设备
3. bs=字节数 指定一次输入/输出多少字节,即把这些字节看做一个数据块
4. count=个数 指定输入/输出多少个数据块
5. date;dd if=/dev/zero of=/root/testfile bs=1k count=10000;date 查看执行需要多长时间
七、管道符:命令1 | 命令2 #命令1的正确输出作为命令2的操作对象
八、grep [选项] "搜索内容" 文件名
1. -i:忽略大小写
2. -n:输出行号
3. -v:反向查找
4. --color=auto 搜索出的关键字用颜色显示
九、通配符
1. ? 匹配一个任意字符
2. * 匹配0个或多个任意字符
3. [] 匹配中括号中任意一个字符。例如:[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c
4. [-] 匹配中括号中任意一个字符,-代表一个范围。例如:[a-z]代表匹配一个小写字母
5. [^] 逻辑非,表示匹配不是中括号内的一个字符。例如:[^0-9]代表匹配一个不是数字的字符
十、Bash中其它特殊符号
1. '' 单引号。在单引号中所有的特殊符号都没有特殊含义
2. "" 双引号。在双引号中特殊符号都没有特殊含义,但是"$"、“`”和"\"是例外
3. `` 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样,推荐$(),因为``容易看错
4. $() 和反引号作用一样
5. # 在shell脚本中,#开头的行代表注释
6. $ 用于调用变量的值,如果需要调用变量name的值时,需要用$name的方式得到变量的值
7. \ 转义符,跟在\之后的特殊符号将失去特殊含义
十一、Bash的变量
A、用户自定义变量
B、环境变量
1. 设置:export 变量名=变量值
2. 查询:env
3. 删除变量名:unset:变量名
C、位置参数变量
1. $n n为数字,代表第几个参数
2. $* 所有参数,当成一个整体
3. $@ 所有参数,把每个参数区别对待
4. $# 代表所有参数的个数
D、预定义变量
1. $? 最后一次执行的命令的返回状态。如果是0,代表上条命令正确执行。
2. $$ 当前进程的进程号(PID)
3. $! 后台运行的最后一个进程的进程号(PID)
十二、接收键盘输入
A、read [选项] [变量名]
1. -p “提示信息”:在等待read输入时,输出提示信息
2. -t read会一直等待用户输入,使用此项可以制定个等待时间
3. -n 字符数:read命令只会接受指定的字符数,就会执行
4. -s 隐藏输入的数据,适用于机密信息的输入
十三、Bash的运算符
A、数值运算与运算符
1. declare 声明变量类型: declare [+/-] [选项] 变量名
a. - 给变量设定类型属性
b. + 取消变量的类型属性
c. -i 将变量声明为整数类型
d. -x 将变量声明为环境变量
e. -p 显示指定变量的被声明类型
2. expr或let数值运算工具
a. aa=11 bb=22 dd=$(expr $aa + $bb)
b. 注意:+号左右两边必须有空格
3. “$((运算式))”或“$[运算式]”
B、变量测试与内容替换
1. x=${y-新值} 如果y没有设置,x为新值。y为空,x为空。y有值,x为y。
2. x=${y:-新值} 如果y没有设置,x为新值。y为空,x为新值。y有值,x为y。
C、环境变量配置文件
1. 使配置文件立即生效: source 配置文件 或者 . 配置文件
2. 配置文件:
a. /etc/profile
b. /etc/profile.d/*.sh
c. ~/.bash_profile
d. ~/.bashrc
3. /etc/bashrc
十四、字符截取命令
A、cut提取命令
1. cut [选项] 文件名
a. -f序号:提取第几列
b. -d分隔符:按照指定分隔符分割列
B、printf命令
1. printf '输出类型输出格式' 输出内容
a. %ns:输出字符串。n是数字指代输出几个字符
b. %ni:输出整数。n指代输出几个数字
c. %m.nf: 输出浮点数。m和n是数字,指代输出的整数位数和小数位数
C、awk命令
D、sed [选项] '[动作]' 文件名
1. 选项
a.-n 一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed处理的行输出到屏幕
b. -e 允许对输入数据用多条sed命令编辑
c. -i 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
2. 动作
a. a \: 追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用“\”代表数据完结
b. c \: 行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需要用“\”代表数据末完结
c. i \: 插入,在当前行前插入一行或多行。插入多行时,除最后一行外,每行末尾需要用“\”代表数据完结。
d. d: 删除,删除指定的行
e. p: 打印,输出指定的行
f. s: 字串替换,用一个字符串替换另一个字符串。格式为“行范围s/旧字符串/新字符串/g ”
十五、字符处理命令
A、sort [选项] 文件名
1. -f:忽略大小写
2. -n:以数值型进行排序,默认使用字符串型排序
3. -r:反向排序
4. -t:指定分隔符,默认分割符是制表符
5. -k n[,m]:按照指定字段范围排序。从第n段开始,m字段结束(默认到行尾)
B、统计命令:wc [选项] 文件名
1. -l:只统计行数
2. -w:只统计单词数
3. -m:只统计字符数
十六、判断文件命令
A、test [选项] 文件 或者 [[选项] 文件]
1. -d 判断该文件是否存在,并且是否为目录文件(是目录为真)
2. -e 判断文件是否存在(存在为真)
3. -f 判断文件是否存在,并且是否是普通文件(是普通文件为真)
4. -L 判断改文件是否存在,并且是否是符号链接文件(是符号链接文件为真)
5. -b 判断文件是否存在,并且是否是块设备文件(是块设备文件为真)
6. -c 判断文件是否存在,并且是否是字符设备文件(是字符设备文件为真)
7. -p 判断文件是否存在,并且是否是管道文件
8. -s 判断文件是否存在,并且是否为非空(非空为真)
9. -S 判断文件是否储存在,并且是否为套接字文件
B、然后用echo $? 判断上条命令是否执行成功 或者 [ -e 文件 ] && echo "yes" || echo "no"
C、判断文件权限
1. -r 判断文件是否存在,并且是否拥有读权限
2. -w 判断文件是否存在,并且是否该文件拥有写权限
3. -x 判断文件是否存在,并且是否拥有执行权限
4. -u 判断文件是否存在,并且是否拥有SUID权限
5. -g 判断文件是否存在,并且是否拥有SGID权限
6. -k 判断文件是否存在,并且是否拥有SBit权限
D、两个文件比较
1. 文件1 -nt 文件2 判断文件1的修改时间是否比文件2的新(如果新为真)
2. 文件1 -ot 文件2 判断文件1的修改时间是否比文件2的旧(如果旧为真)
3. 文件1 -ef 文件2 判断文件1和文件2的inode号是否一致(可以理解为是否是同一个文件,可以判断是否是硬链接)
E、两个数之间比较
1. 整数1 -eq 整数2 判断两个数是否相等
2. 整数1 -nq 整数2 判断两个数是否不相等
3. 整数1 -gt 整数2 判断整数1是否大于整数2
4. 整数1 -lt 整数2 判断整数1是否小于整数2
5. 整数1 -ge 整数2 判断整数1是否大于等于整数2
6. 整数1 -le 整数2 判断整数1是否小于等于整数2
F、字符串的判断
1. -z 字符串 判断字符串是否为空
2. -n 字符串 判断字符串是否非空
3. 字符串1==字符串2 判断字符串是否和字符串2相等
4. 字符串1!=字符串2 判断字符串1和字符串2不相等
十七、条件控制语句
A、if语句
1. 单分支if条件语句
a. if [ 条件判断式 ] ; then
程序
fi
b. if [ 条件判断式 ]
then
程序
else
程序
fi
B、case语句
1. case $变量名 in
"值1")
如果变量的值等于1,则执行程序1
;;
"值2")
如果变量的值等于2,则执行程序2
;;
*)
如果变量的值都不是以上的值,则执行此程序
;;
C、for循环
1. for 变量 in 值1 值2 值3...
do
程序
done
2. for ((初始值;循环控制条件;变量变化))
do
程序
done
D、while循环
1. while [ 条件判断式 ]
do
程序
done
E、until循环
1. until和while相反