if語句

在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
相關文章
相關標籤/搜索