Linux系统之shell脚本基础:条件测试、正整数字符串比较与if、case语句
目录
一.条件测试
1.三种测试方法
2.正整数值比较
3.字符串比较
4.逻辑测试
二.脚本中常用命令
1.echo命令
2.date命令
3.cal命令
4.tr命令
5.cut命令
6.sort命令
7.uniq命令
8.cat多行重定向
三.if语句
1.使用格式
2.if语句实例
四.case格式
1.使用格式
2.case语句实例
一.条件测试
1.三种测试方法
- test命令测试
- [ ]测试(注意前后需要有空格)
- [[ ]]加强版[ ],测试支持通配符和正则表达式
三种测试方法选项:
- -d:测试是否为文件夹
- -f:测试是否为普通文件
- -e:测试文件或目录是否存在
- -a:测试文件或目录是否存在,不建议使用此选项,取反!=时echo $?是错误的返回值。
- -L:测试是否为软连接文件
- -r:判断当前用户是否有读权限,根据实际情况返回结果,不是按ll显示的文件属性权限。
- -w:判断当前用户是否有写权限,根据实际情况返回结果,不是按ll显示的文件属性权限。
- -x:判断当前用户是否有执行权限,根据实际情况返回结果,root账户时其他用户有执行权限root账户也有,若其他账户没有执行权限则root也没有。
2.正整数值比较
比较方法使用上述三种条件测试即可,①test命令②[ ] 注意前后空格③[[ ]]注意前后空格
选项:
- -eq:比较第一个正整数是否等于(equal)第二个正整数
- -ne:比较第一个正整数不等于(not equal)第二个正整数
- -gt:比较第一个正整数是否大于(Greate than)第二个正整数
- -lt:比较第一个正整数是否小于(Lesser than)第二个正整数
- -ge:比较第一个正整数是否大于等于(Greate or equal )第二个正整数
- -le:比较第一个正整数是否小于等于(Lesser or equal)第二个正整数
3.字符串比较
比较方法使用上述三种条件测试即可,①test命令②[ ] 注意前后空格③[[ ]]注意前后空格
选项:
- =:等号前后字符串是否相等,注意前后需要空格。
- !=:!表示取反的意思,等号前后字符串是否不相等,注意前后需要空格。
- -z:判断字符串是否为空
- -n:字符是否存在
4.逻辑测试
-
格式1: 【表达式1】 操作符 【表达式2】
-
格式2:命令1 操作符 命令2
操作符:
&&或-a:表示且的意思,前面表达式或命令1为真才会执行操作符后面的表达式2或命令2,一假则为假。
ll或-o:表示或的意思,前面表达式1或命令1为真则整个表达式为真,前面表达式1或命令1为假则执行操作符后面的表达式2或命令2,一真则为真。
!:逻辑否。
二.脚本中常用命令
1.echo命令
echo命令:打印内容在窗口中。
- -n :表示输出不换行
- -e :表示输出转义符
echo -e 配合转义符。
- \b:退格,删除前一个字符。例如 echo -e "1234\b56"则输出的是12356,4会被删除。
- \c:抑制更多输出,\c后的内容全部不输出。例如 echo -e "123\c456"则输出的是123。
- \n:输出换行,\n后的内容换行。例如 echo -e "123\n456 " 则输出123下一行输出456。
- \t:相当于输出过程中按了一下tab键。
- \f:输出换行但是光标位置不变。例如echo -e "123\f456"则输入123下一行开头空出123的位置然后再输出456。
2.date命令
date命令:查看时间,显示格式为,星期 月 日 时 分 秒 年
选项:
- +%F:输出格式年-月-日,注意%在crontab定时中不能直接使用,需要转义
- +%T:输出格式时:分:秒, 注意%在crontab定时中不能直接使用,需要转义
3.cal命令
cal命令:显示当月日历。
选项:
cal 12 显示本年整年日历
cal 某年 显示此年完整日历
4.tr命令
tr命令:替换内容
基本格式:tr 需要替换的内容 替换后的内容
例如: tr [a-z] [A-Z] 遇见小写字母全部转为大写字母
选项:
- -s:压缩功能。例如:tr -s aaa 输出a;
- -d:删除功能:例如:tr -d abc 则输入123abc回车只会打印123;
- -c:用字符串1中字符集的补集替换此字符集,例如 cat /dev/random | tr -dc [[:alnum:]] | head -c 12。 /dev/random中是随机的字符内容
- -dc 表示删除其他不需要内容 [[:alnum:]] 表示数字和字符 head -c 12 表示取前12个字符,完整表达式意思为查看random文件并将非字符和数字内容删除然后取前12个字符,常用于生成随机密码。
5.cut命令
cut命令:提取想要的信息。
选项:
- -d:指定分隔符 例如 cut -d ":"指定:为分隔符。
- -f:选择第几列 例如 cut -f3 取第三列,-f1,3取第1列和第三列,-f1-3取1-3列。
6.sort命令
sort命令:排序
选项:
- -r:执行反方向(由上至下)整理;
- -n:按数字大小整理,默认第一列默认字母顺序;
- -t:制定分隔符;
- -k:指定列,例如-k3。
7.uniq命令
uniq命令:去除连续的重复,一般配合sort使用。
-c:显示每个重复的次数。
split命令:分隔大文件
-b 大小(例如1G)+ 要分隔文件名 加名称分隔指定名称,但是后面的xaa,xab不能指定,只能指定x。
8.cat多行重定向
cat <<EOF
1
2
3
EOF
打印123到屏幕
三.if语句
1.使用格式
then (条件1成立则走then)
[执行命令]
elif [条件判断2 ] (可添加多个elif )
then (条件2成立则走then)
[执行命令]
else (所有条件不成立则走else)
[执行命令]
fi (if结束语句)
2.if语句实例
学生输入分数判断自己的成绩是优秀(91-100)、良好(81-90)、及格(60-80)、不及格(小于60)
四.case格式
1.使用格式
case 变量引用 in
PAT1) 符合条件1执行分支1的命令,PAT1可以使用通配符
分支1命令
;; 每个分支结束的固定格式
PAT2) 符合条件1执行分支2的命令,PAT2可以使用通配符
分支2命令
;; 每个分支结束的固定格式,可以有多个分支
*) 不符合其他任意分支的默认分支
默认分支命令
;; 分支结束的固定格式
esac case语句结束标志