格式1
語法:
if 條件 ;then commond;fi
eg:
#!/bin/bash
a=5if [ $a
-gt3 ]
then
echo
"大於3"
fi
格式2
語法:
if 條件1;then commond1;else commond2;fi
eg:
#!/bin/bash
a=5if [ $a
-gt3 ]
then
echo
"大於3"
else
echo
"不大於3"
fi
格式3
語法:
if 條件1;then commond1;elif 條件2;then commond2;else commond3;fi
eg:
#!/bin/bash
a=5if [ $a
-lt3 ]
then
echo
"a<3"
elif [ $a
-gt6 ]
then
echo
"a>6"
else
echo
"out of the zone"
fi
eg:
#!/bin/bash
n=`wc -l /tmp/test.txt`
if [ $n
-gt20 ]
then
echo
1else
echo
0fi
在該指令碼中無語法錯誤,只是我們預設/tmp/test.txt是存在的,如果該檔案不存在,該指令碼執行的時候就會報錯:
[root@dl-001 sbin]# sh if.sh
wc: /tmp/test.txt: 沒有那個檔案或目錄
if.sh: 第 3 行:[: -gt: 期待一元表示式
所以,為了避免這種錯誤的發生,需要將指令碼寫的更加嚴謹,需要在執行「if [ $n -gt 20 ]」之前先確認檔案「/tmp/test.txt」是否存在:
#!/bin/bash
n=`wc -l /tmp/test.txt`
if [ -z $n ]
then
echo
"error"
exit
elif [ $n
-lt20 ]
then
echo
1else
echo
0fi
即,如果變數n為空則顯示error並退出該指令碼。
[root@dl-001 sbin]# sh if.sh
wc: /tmp/test.txt: 沒有那個檔案或目錄
error
即,當該檔案不存在的時候就會退出執行,不會提示存在語法錯誤。
eg:
#判斷某引數存在:
[root@dl-001 sbin]# vim if1.sh
#!/bin/bash
if grep -wq 'user1' /etc/passwd
then
echo
"user1 exist."
fi[root@dl-001 sbin]# sh if1.sh
#判斷某引數不存在:
[root@dl-001 sbin]# vim if2.sh
#!/bin/bash
if ! grep -wq 'user1' /etc/passwd
then
echo
"no user1"
fi[root@localhost sbin]# sh if2.sh
no user1
說明: grep中-w選項=word,表示過濾乙個單詞;-q,表示不列印過濾的結果。判斷某引數不存在時使用!表示取反。
格式:
case 變數名 in
value1)
commond1
;;value2)
commod2
;;value3)
commod3
;;esac
在case中,可以在條件中使用「|」,表示或的意思,如:
2|3) //表示2或者3
commond
;;
小練習(需求:輸入考試成績,判斷考試成績的等級)[root@dl-001 sbin]# vim case1.sh
#!/bin/bash
read -p "please input a number: " n
if [ -z "$n" ]
then
echo
"please input a number."
exit
1#「exit 1」表示執行該部分命令後的返回值
#即,命令執行完後使用echo $?的值
fin1=`echo
$n|sed 's/[0-9]//g'`
#判斷使用者輸入的字元是否為純數字
#如果是數字,則將其替換為空,賦值給$n1
if [ -n "$n1" ]
then
echo
"please input a number."
exit
1#判斷$n1不為空時(即$n不是純數字)再次提示使用者輸入數字並退出
fi#如果使用者輸入的是純數字則執行以下命令:
if [ $n
-lt60 ] && [ $n -ge 0 ]
then
tag=1
elif [ $n -ge 60 ] && [ $n
-lt80 ]
then
tag=2
elif [ $n -ge 80 ] && [ $n
-lt90 ]
then
tag=3
elif [ $n -ge 90 ] && [ $n -le 100 ]
then
tag=4
else
tag=0
fi#tag的作用是為判斷條件設定標籤,方便後面引用
case
$tag
in1)
echo
"not ok"
;;2)
echo
"ok"
;;3)
echo
"ook"
;;4)
echo
"oook"
;;*)
echo
"the number range is 0-100."
;;esac
執行結果:
[root@dl-001 sbin]# sh case1.sh
please input a number:
90oook
[root@dl-001 sbin]# sh case1.sh
please input a number:
80ook
[root@dl-001 sbin]# sh case1.sh
please input a number:
60ok
[root@dl-001 sbin]# sh case1.sh
please input a number:
55not ok
Shell流程控制
case迴圈 if condition condition then statements if true 1 elif condition condition then statements if true 2 else statements if all else fails fi注 方括號中的...
Shell 流程控制
shell的流程控制不可為空,如果else分支沒有語句執行,就不要寫這個else。if 語句語法格式 if condition then command1 command2 commandn fi寫成一行 適用於終端命令提示符 if ps ef grep c ssh gt 1 then echo t...
Shell流程控制
shell 流程控制 if else if語法格式 if condition then command1 command2 fi 末尾的fi就是if倒過來拼寫 if else語法 if condition then command1 command2 else command1 fi if else...