在bash中if实现条件测试;
条件测试类型:
整数测试
字符测试
文件测试
一、条件测试的表达式:
[ expression ] 括号两端必须要有空格
[[ expression ]] 括号两端必须要有空格
test expression
组合测试条件:
-a: and
-o: or
!: 非
第一种方式:
COMMAND1 && COMMAND2 并且
COMMAND1 || COMMAND2 或者
!COMMAND 非
第二种方式:
EXPRESSION1 -a EXPRESSION2 并且
EXPRESSION1 -o EXPRESSION2 或者
! EXPRESSION 非
二、数值测试 :

    -eq 测试两个整数是否相等
    -ne 测试两个整数是否不等
    -gt 测试一个数是否大于另一个数
    -lt 测试一个数是否小于另一个数
    -ge 大于或等于
    -le 小于或等于

命令间的逻辑关系
逻辑与:&&
第一个条件为假 第二个条件不用在判断,最总结果已经有
第一个条件为真,第二个条件必须得判断
逻辑或:||
三、字符串测试

         == 是否等于 
         > ascii码是否大于ascii码 
         < 是否小于 
         != 是否不等于 
         =~ 左侧字符串是否能够被右侧的PATTERN所匹配 
         注意: 此表达式一般用于[[  ]]中;扩展的正则表达式 
         -z "STRING“ 字符串是否为空,空为真,不空为假 
         -n "STRING“ 字符串是否不空,不空为真,空为假 
         注意:用于字符串比较时的用到的操作数都应该使用引号

四、文件测试

    -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语句
单分支

    if 判断条件;then 
                        条件为真的分支代码
    fi 

双分支

    f 判断条件; then 
                        条件为真的分支代码 
    else
                        条件为假的分支代码 
    fi

多分支

    if 判断条件1; then 
                        条件为真的分支代码 
    elif 判断条件2; then 
                        条件为真的分支代码 
    elif 判断条件3; then 
                        条件为真的分支代码 
    else 
                    以上条件都为假的分支代码
    fi 

示例脚本:

判断某字符串是否为整数

    [root@localhost ~]# num=123; [[ "$num" =~ ^[0-9]+$ ]] && echo true 
    true

判断某字符串是否以.sh结尾

    [root@localhost ~]# file=abc.sh ; [[ "$file" =~ ^.*\.sh$ ]] && echo true 
    true

判分.sh

    #!/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 "你好请问吃点什么,我们这里有:1、面条和2、米饭: " a

    case $a in

            1|面|面条)

            read -p "我们这里有:1、老碗面,2、牛肉面,3、热干面 : " b

            case $b in

                            1|老碗面) read -p "我们分1、小份8元,你要2、大份还是10元 : " qw 

                                    case $qw in

                                            1|大份|大份老碗面|大) echo "订餐完毕,请稍等!" ;;

                                            2|小份|小份老碗面|小) echo "订餐完毕,请稍等!" ;;

                                                *) echo "输入有误," ;;

                                    esac    

                                    ;;

                            2|牛肉面) read -p "我们分1、小份8元,你要2、大份还是10元 : " qe 

                                    case $qe in

                                            1|大份|大份牛肉面|大) echo "订餐完毕,请稍等!" ;;

                                            2|小份|小份牛肉面|小) echo "订餐完毕,请稍等!" ;;

                                            *) echo "输入有误," ;;

                                    esac    

                                    ;;

                            3|热干面) read -p "我们分1、小份5元,你要2、大份还是8元 : " qr

                                    case $qr in

                                            1|大份|大份热干面|大) echo "订餐完毕,请稍等!" ;;

                                            2|小份|小份热干面|小) echo "订餐完毕,请稍等!" ;;

                                            *) echo "输入有误," ;;

                                    esac    

                                    ;;

                                *) echo "输入有误," ;;

            esac ;;  

            2|米饭)

            echo "请选着什么面食"

            read -p "我们这里有:1、黄焖鸡,2、黄焖酥肉,3、鸡公煲 : " b

            case $b in

                                                    1|黄焖鸡) read -qt "我们分1、小份12元,你要2、大份还是18元 : " qt

                                    case $q in

                                            1|大份|大份黄焖鸡|大) echo "订餐完毕,请稍等!" ;;

                                            2|小份|小份黄焖鸡|小) echo "订餐完毕,请稍等!" ;;

                                            *) echo "输入有误," ;;

                                    esac    

                                    ;;

                                                    2|黄嫩酥肉) read -p "我们分1、小份15元,你要2、大份还是20元 : " w 

                                    case $w in

                                            1|大份|大份黄门酥肉|大) echo "订餐完毕,请稍等!" ;;

                                            2|小份|小份黄门酥肉|小) echo "订餐完毕,请稍等!" ;; 

                                             *) echo "输入有误," ;;

                                    esac    

                                    ;;

                                                    3|鸡公煲) read -p "我们分1、小份15元,你要2、大份还是18元 : " p 

                                    case $p in

                                            1|大份|大份鸡公煲|大) echo "订餐完毕,请稍等!" ;;

                                            2|小份|小份鸡公煲|小) echo "订餐完毕,请稍等!" ;;

                                             *) echo "输入有误," ;;

                                    esac    

                                    ;;

                                     *) echo "输入有误," ;;

            esac ;;

            *) echo "输入有误," ;;

    esac