快速上手shell条件测试
一、命令执行结果判定
&& 命令执行后如果没有任何报错时会执行符号后面的动作
|| 在命令执行后如果命令有报错会执行符号后的动作
二、条件判断方法
条件测试语法 | 说明 | 示例 |
test 测试表达式 | test命令和 测试表达式 之间至少有一个空格 | ![]() |
[ 测试表达式 ] | 该方法和test命令的用法一样,[]的边界和内容之间至少有一个空格 | ![]() |
[[ 测试表达式 ]] | 比test和[]更新的语法格式。[[]]的边界和内容之间至少有一个空格。[[]]中可以使用通配符等进行模式匹配 | ![]() |
((测试表达式)) | 一般用于if语句里,双小括号两端不需要有空格,测试对象只能是整数 | ![]() |
三、判断表达式
1.文件判断表达式
f1 -ef f2 f2为f1硬链接则为真
- 判断文件是否存在
- 判断文件类型为目录
- 判断文件是否存在并不为空
- 判断文件权限
- 判断文件新旧
- 判断字符文件
2.字符串测试表达式
常用字符串测试操作 | 说明 | 示例 |
-n "字符串" | 若字符串的长度不为0,则为真,即测试表达式成立,n可以理解为no zero | |
-z "字符串" | 若字符串长度为0,则为真,z可理解成zero | ![]() |
"字符串1"="字符串2" | 若字符串1等于字符串2,则为真,可使用==代替= | ![]() |
"字符串1"!="字符串2" | 若字符串1不等于字符串2,则为真 | ![]() |
四、阶段练习脚本
检测并判断文件类型
#!/bin/bashfile(){[ -f $TXT ] && echo is file || muluinput
}mulu(){[ -d $TXT ] && echo is directory || echo not findinput
}again(){echo Error: Please inputinput
}out(){echo byeexit 0
}input(){read -p "input:" TXT[ "$TXT" = "exit" ] && out[ -z "$TXT" ] && again || file
}
input
五、整数测试表达式
在[]以及test中使用的比较符号 | 在(())和[[]]中使用的比较符号 | 说明 |
-eq | ==或= | 相等,全拼为equal |
-ne | != | 不相等,全拼为not equal |
-gt | > | 大于,全拼为greater than |
-ge | >= | 大于等于,全拼为greater equal |
-lt | < | 小于,全拼为less than |
-le | <= | 小于等于,全拼为less equal |
示例
六、逻辑操作符
! | ! | not,取反 |
示例
七、判断综合训练
猜数游戏
#!/bin/bash
SET(){LUCK=$[$RANDOM%10]
}no(){echo "Error:Please input number"GAUSE
}check(){[ "$NUM" -gt "$LUCK" ] && echo big || recheckGAUSE
}recheck(){[ "$NUM" -eq "$LUCK" ] && win || echo smallGAUSE
}win(){echo "you are right! again?(y/n):"read RESTART[ "$RESTART" = "y" ] && {SETGAUSE} || {echo byeexit 0}
}GAUSE(){read -p "input num between 0-9:" NUM[ -z "$NUM" ] && no(( $NUM > 10 || $NUM < 0 )) && {echo "Error:Please input 0-9"GUESS}check}
SET
GAUSE
演示: