在bash中if实现条件测试;
条件测试类型:
整数测试
字符测试
文件测试
1、条件测试的表达式:
[ expression ] 括号两端必需要有空格
[[ expression ]] 括号两端必需要有空格
test expression
组合测试条件:
-a: and
-o: or
!: 非
第一种方式:
COMMAND1 && COMMAND2 而且
COMMAND1 || COMMAND2 或者
!COMMAND 非
第二种方式:
EXPRESSION1 -a EXPRESSION2 而且
EXPRESSION1 -o EXPRESSION2 或者
! EXPRESSION 非
2、数值测试 : 正则表达式
-eq 测试两个整数是否相等 -ne 测试两个整数是否不等 -gt 测试一个数是否大于另外一个数 -lt 测试一个数是否小于另外一个数 -ge 大于或等于 -le 小于或等于
命令间的逻辑关系
逻辑与:&&
第一个条件为假 第二个条件不用在判断,最总结果已经有
第一个条件为真,第二个条件必须得判断
逻辑或:||
3、字符串测试 express
== 是否等于 > ascii码是否大于ascii码 < 是否小于 != 是否不等于 =~ 左侧字符串是否可以被右侧的PATTERN所匹配 注意: 此表达式通常用于[[ ]]中;扩展的正则表达式 -z "STRING“ 字符串是否为空,空为真,不空为假 -n "STRING“ 字符串是否不空,不空为真,空为假 注意:用于字符串比较时的用到的操做数都应该使用引号
4、文件测试 centos
-z string 测试指定字符是否为空,空着真,非空为假 -n string 测试指定字符串是否为不空,空为假 非空为真 -e FILE 测试文件是否存在 -f file 测试文件是否为普通文件 -d file 测试指定路径是否为目录 -r file 测试文件对当前用户是否可读 -w file 测试文件对当前用户是否可写 -x file 测试文件对当前用户是均可执行 -z 是否为空 为空则为真 -a 是否不空 -u file :是否存在且拥有suid权限 -g file :是否存在且拥有sgid权限 -k file :是否存在且拥有sticky权限
if语句
单分支bash
if 判断条件;then 条件为真的分支代码 fi
双分支 app
f 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 fi
多分支 ide
if 判断条件1; then 条件为真的分支代码 elif 判断条件2; then 条件为真的分支代码 elif 判断条件3; then 条件为真的分支代码 else 以上条件都为假的分支代码 fi
示例脚本: 测试
判断某字符串是否为整数ui
[root@localhost ~]# num=123; [[ "$num" =~ ^[0-9]+$ ]] && echo true true
判断某字符串是否以.sh结尾code
[root@localhost ~]# file=abc.sh ; [[ "$file" =~ ^.*\.sh$ ]] && echo true true
判分.ship
#!/bin/bash read -p "Please input your score: " score if [[ ! "$score" =~ ^[0-9]+$ ]];then echo "Your score is not interger" exit 1 fi if [ $score -lt 60 ];then echo "You need study hard" elif [ $score -ge 60 -a $score -lt 80 ];then echo "You score is so so" elif [ $score -ge 80 -a $score -le 100 ];then echo "You score is very good" else echo "You score is invalid" fi
练习:写一个×××系统,判断5个数字。
1 5 3 8 9
输入 第一个值。
输入 第二个值。
输入 第三个值。
输入 第四个值。
输入 第五个值。
每一步在输入完,都会判断,若是中了,则有输出结果:
第一次中输出 : First blood
第二次中输出 : Double kill
第三次中输出 :Triple kill
第四次中输出 :Quadra Kill
第五次中输出 :Penta Kill 以及 ACE!
一次也不中输出: Defeat!
[root@centos6mini app]# cat ./caipiao.sh #bin/bash n1=$(echo $[$RANDOM%10]) n2=$(echo $[$RANDOM%10]) n3=$(echo $[$RANDOM%10]) n4=$(echo $[$RANDOM%10]) n5=$(echo $[$RANDOM%10]) i=0 echo $n1 $n2 $n3 $n4 $n5 #取出5个数 read -p "请输入第1个数值: " s1 if [[ ! $s1 =~ ^[0-9]$ ]] ;then echo "请输入10之内且为整数" ; exit 1 else if [[ $s1 -eq $n1 ]];then echo " First blood " i=$[ $i+1 ] else echo "错了!" fi fi read -p "请输入第2个数值: " s2 if [[ ! $s2 =~ ^[0-9]$ ]] ;then echo "请输入10之内且为整数"; exit 2 else if [[ $s2 -eq $n2 ]];then i=$[ $i+1 ] if [[ i -eq 1 ]];then echo "First blood" elif [[ i -eq 2 ]];then echo "Double kill" elif [[ i -eq 3 ]] ;then echo "Triple kill" elif [[ i -eq 4 ]];then echo "Quadra kill" elif [[ i -eq 5 ]];then echo " Penta kill and ACE " else echo " Defeat " fi else echo "you错了!" fi fi read -p "请输入第3个数值: " s3 if [[ ! $s3 =~ ^[0-9]$ ]] ; then echo "请输入10之内且为整数"; exit 3 else if [[ $s3 -eq $n3 ]];then i=$[ $i+1 ] if [[ i -eq 1 ]];then echo "First blood" elif [[ i -eq 2 ]];then echo "Double kill" elif [[ i -eq 3 ]] ;then echo "Triple kill" elif [[ i -eq 4 ]];then echo "Quadra kill" elif [[ i -eq 5 ]];then echo " Penta kill and ACE " else echo " Defeat " fi else echo "还有两次机会!" fi fi read -p "请输入第4个数值: " s4 if [[ ! $s4 =~ ^[0-9]$ ]] ; then echo "请输入10之内且为整数" ;exit 4 else if [[ $s4 -eq $n4 ]];then i=$[ $i+1 ] if [[ i -eq 1 ]];then echo "First blood" elif [[ i -eq 2 ]];then echo "Double kill" elif [[ i -eq 3 ]] ;then echo "Triple kill" elif [[ i -eq 4 ]];then echo "Quadra kill" elif [[ i -eq 5 ]];then echo " Penta kil and ACE " else echo " Defeat " fi else echo "还有一次机会!" fi fi read -p "请输入第5个数值: " s5 if [[ ! $s5 =~ ^[0-9]$ ]] ;then echo "请输入10之内且为整数"; exit 5 else if [[ $s5 -eq $n5 ]];then i=$[ $i+1 ] case $i in 1 ) echo "First blood" ;; 2 ) echo "Double kill" ;; 3 ) echo "Triple kill" ;; 4 ) echo "Quadra kill" ;; 5 ) echo " Penta kil and ACE " ;; * ) echo " Defeat " ;; esac else echo "没有机会了 !!!" fi fi
编写一个菜单,
你好,要吃点什么?
1)面食
1.老碗面
1.小份:6元 2.大份:8元
2.牛肉面
1.小份:8元 2.大份:9元
3.热干面
0.原味 7元
1.加卤蛋 11元
2.加豆干 12元
3.都加 13元
2)饭
1.黄焖鸡
1.小份 15元 2.大份 20元
2.黄焖酥肉
1.小份 15元 2.大份 20元
3鸡公煲
小份12元 大份 20元
[root@centos6mini zuoye]# cat 10.sh #!/bin/bash read -p "你好请问吃点什么,咱们这里有:一、面条和二、米饭: " a case $a in 1|面|面条) read -p "咱们这里有:一、老碗面,二、牛肉面,三、热干面 : " b case $b in 1|老碗面) read -p "咱们分一、小份8元,你要二、大份仍是10元 : " qw case $qw in 1|大份|大份老碗面|大) echo "订餐完毕,请稍等!" ;; 2|小份|小份老碗面|小) echo "订餐完毕,请稍等!" ;; *) echo "输入有误," ;; esac ;; 2|牛肉面) read -p "咱们分一、小份8元,你要二、大份仍是10元 : " qe case $qe in 1|大份|大份牛肉面|大) echo "订餐完毕,请稍等!" ;; 2|小份|小份牛肉面|小) echo "订餐完毕,请稍等!" ;; *) echo "输入有误," ;; esac ;; 3|热干面) read -p "咱们分一、小份5元,你要二、大份仍是8元 : " qr case $qr in 1|大份|大份热干面|大) echo "订餐完毕,请稍等!" ;; 2|小份|小份热干面|小) echo "订餐完毕,请稍等!" ;; *) echo "输入有误," ;; esac ;; *) echo "输入有误," ;; esac ;; 2|米饭) echo "请选着什么面食" read -p "咱们这里有:一、黄焖鸡,二、黄焖酥肉,三、鸡公煲 : " b case $b in 1|黄焖鸡) read -qt "咱们分一、小份12元,你要二、大份仍是18元 : " qt case $q in 1|大份|大份黄焖鸡|大) echo "订餐完毕,请稍等!" ;; 2|小份|小份黄焖鸡|小) echo "订餐完毕,请稍等!" ;; *) echo "输入有误," ;; esac ;; 2|黄嫩酥肉) read -p "咱们分一、小份15元,你要二、大份仍是20元 : " w case $w in 1|大份|大份黄门酥肉|大) echo "订餐完毕,请稍等!" ;; 2|小份|小份黄门酥肉|小) echo "订餐完毕,请稍等!" ;; *) echo "输入有误," ;; esac ;; 3|鸡公煲) read -p "咱们分一、小份15元,你要二、大份仍是18元 : " p case $p in 1|大份|大份鸡公煲|大) echo "订餐完毕,请稍等!" ;; 2|小份|小份鸡公煲|小) echo "订餐完毕,请稍等!" ;; *) echo "输入有误," ;; esac ;; *) echo "输入有误," ;; esac ;; *) echo "输入有误," ;; esac