shell编程基础(二)
1、条件表达式
1.1 文件判断
常用文件测试操作符:
-d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立
-f文件,f的全拼为file 文件存在且为普通文件则为真,即测试表达式成立
-e文件,e的全拼为exist 文件存在则为真,即测试表达式成立。注意区别于“-f”,-e不辨别是目录还是文件
-r文件,r的全拼为read 文件存在且可读则为真,即测试表达式成立
-s文件,s的全拼为size 文件存在且文件大小不为0则为真,即测试表达式成立
-w文件,w的全拼为write 文件存在且可写则为真,即测试表达式成立
-x文件,x的全拼为executable 文件存在且可执行则为真,即测试表达式成立
-L文件,L的全拼为link 文件存在且为链接文件则为真,即测试表达式成立
fl -nt f2,nt 的全拼为 newer than 文件fl比文件f2新则为真,即测试表达式成立。根据文件的修改时间来计算
fl -ot f2,ot 的全拼为 older than 文件fl比文件f2旧则为真,即测试表达式成立。根据文件的修改时间来计算
1.2 字符串判断
常用字符串测试操作符:
-n "字符串" 若字符串的长度不为0,则为真,即测试表达式成立,n可以理解为no zero
-Z "字符串" 若字符串的长度为0,则为真,即测试表达式成立,z可以理解为zero的缩写
"串 1"== "串 2" 若字符串1等于字符串2,则为真,即测试表达式成立,可使用"=="代替"="
"串 1" != "串 2" 若字符串1不等于字符串2,则为真,即测试表达式成立,但不能用"!=="代替"!="
1.对于字符串的测试,一定要将字符串加双引号之后再进行比较。
2.空格非空
-z 判断字符串长度
-n 判断字符串长度
"串 1" == " 串 2 " 使用定义变量的方式进行判断
1.3 整数判断
在[]以及test中
使用的比较符号
在(())和[[]]中
使用的比较符号
-eq ==或= 相等,全拼为equal
-ne != 不相等,全拼为not equal
-gt > 大于,全拼为greater than
-ge >= 大于等于,全拼为greater equal
-lt < 小于,全拼为丨ess than
-le <= 小于等于,全拼为less equal
判断两数是否相等
大于等于
小于
大于
不等于
1.4 逻辑符号
在[]和test中使用的操作符 | 说明 | 在[[]]和中使用的操作符 | |
-a | [ 条件A -a 条件B ] A与B都要成立,整个表达式才成立 | && | and,与,两端都为真,则结果为真 |
-o | [ 条件A -o 条件B] A与B都不成立,整个表达式才不成立 | || | or,或,两端有一个为真,则结果为真 |
! | ! | not,非,两端相反,则结果为真 |
逻辑操作与整数判断结合
[root@clsn ~]# [ 11 -ne 1 ] && echo "成立" || echo "不成立" 成立
取反
[root@clsn ~]# [ ! 11 -ne 1 ] && echo "成立" || echo "不成立" 不成立
感叹号的特殊用法
使用历史命令,感叹号加上history中的序号,即可执行
[root@clsn ~]# !516 ls anaconda-ks.cfg bootime.avg setup.sh vim
1.5 【练习题】开发3个shell脚本比较2个整数大小
要求:
1. 分别以定义变量,脚本传参以及read读入的方式写3个脚本。
2. 用条件表达式(禁止if语句)进行判断。
3. 将2个整数的比较结果输出到屏幕,出错需要提示。
使用定义变量方法
[root@clsn panduan1]# cat panduan1.sh #!/bin/bash ############################################################# # File Name: panduan1.sh # Version: V1.0 # Author: clsn # Organization: http://blog.znix.top # Created Time : 2017-12-06 11:27:32 # Description: ############################################################# NUM1=6 NUM2=2 expr 1 + $NUM1 &>/dev/null [ $? -eq 2 ] && echo "$NUM1 不是整数 " && exit 2 expr 1 + $NUM2 &>/dev/null [ $? -eq 2 ] && echo "$NUM2 不是整数 " && exit 2 [ "$NUM1" -eq "$NUM2" ] && echo $NUM1 = $NUM2 && exit [ "$NUM1" -gt "$NUM2" ] && echo $NUM1 \> $NUM2 && exit [ "$NUM1" -lt "$NUM2" ] && echo $NUM1 \< $NUM2
使用传参方法
[root@clsn panduan1]# cat panduan_chuanchan.sh #!/bin/bash ############################################################# # File Name: panduan1.sh # Version: V1.0 # Author: clsn # Organization: http://blog.znix.top # Created Time : 2017-12-06 11:27:32 # Description: ############################################################# [ $# -ne 2 ] && echo "UASGE $0 num1 num2 " && exit NUM1=$1 NUM2=$2 expr 1 + $NUM1 &>/dev/null [ $? -eq 2 ] && echo "$NUM1 不是整数 " && exit 2 expr 1 + $NUM2 &>/dev/null [ $? -eq 2 ] && echo "$NUM2 不是整数 " && exit 2 [ "$NUM1" -eq "$NUM2" ] && echo $NUM1 = $NUM2 && exit [ "$NUM1" -gt "$NUM2" ] && echo $NUM1 \> $NUM2 && exit [ "$NUM1" -lt "$NUM2" ] && echo $NUM1 \< $NUM2
使用read读入方法
[root@clsn panduan1]# cat panduan_read.sh #!/bin/bash ############################################################# # File Name: panduan1.sh # Version: V1.0 # Author: clsn # Organization: http://blog.znix.top # Created Time : 2017-12-06 11:27:32 # Description: ############################################################# read -p "请输入第一个整数:" NUM1 read -p "请输入第二个整数:" NUM2 expr 1 + $NUM1 &>/dev/null [ $? -eq 2 ] && echo "$NUM1 不是整数 " && exit 2 expr 1 + $NUM2 &>/dev/null [ $? -eq 2 ] && echo "$NUM2 不是整数 " && exit 2 [ "$NUM1" -eq "$NUM2" ] && echo "$NUM1 = $NUM2" && exit [ "$NUM1" -gt "$NUM2" ] && echo "$NUM1 > $NUM2" && exit echo "$NUM1 < $NUM2"