在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