if 語法格式
if condition then statements [elif condition then statements] [else statements ] fi
示例
vi if.sh
#!/bin/bash
if [ $1 = root ] then echo "hello $2 , welcome !"
elif [ $1 = intsmaze ] then echo "hello ${2}, welcome !"
else echo "SB${2}, get out here !" fi
sh if.sh intsmaze nihao 通過執行腳本時,在腳本命令的后面傳入參數。
判斷條件
1:條件判斷基本語法
[ condition ] (注意condition前后要有空格)
#非空返回true,可使用$?驗證(0為true,1為false)
#空返回false,里面條件為空格也是叫空。
[hadoop@centos-Reall-131 shtest]$ if [ 1 ]; then echo ok ;else echo bad; fi; ok [hadoop@centos-Reall-131 shtest]$ if [ 0 ]; then echo ok ;else echo bad; fi; ok [hadoop@centos-Reall-131 shtest]$ if [ a ]; then echo ok ;else echo bad; fi; ok [hadoop@centos-Reall-131 shtest]$ if [ ]; then echo ok ;else echo bad; fi; bad [hadoop@centos-Reall-131 shtest]$ if [ ]; then echo ok ;else echo bad; fi; bad
注意[ ]內部的=周邊的空格,有區別:
[hadoop@centos-Reall-131 shtest]$ if [ a=b ]; then echo ok ;else echo bad; fi; ok [hadoop@centos-Reall-131 shtest]$ if [ a = b ]; then echo ok ;else echo bad; fi; bad
#a=b它識別為一個整體的字符串,所以條件判斷為true
短路(理解為三元運算符)
[ condition ] && echo OK || echo notok
條件滿足,執行&&后面的語句;條件不滿足,執行|| 后面的語句
2:條件判斷組合
注:[] 與[[ ]] 的區別:[[ ]] 中邏輯組合可以使用 &&(與) ,||(或) ,而[] 里面邏輯組合可以用 -a(與) ,-o(或)。
[hadoop@centos-Reall-131 shtest]$ if [ a = b && b = c ]; then echo ok;else echo bad;fi -bash: [: missing `]' bad [hadoop@centos-Reall-131 shtest]$ if [ a = b -a b = b ]; then echo ok;else echo bad;fi bad [hadoop@centos-Reall-131 shtest]$ if [ a = b -o b = b ]; then echo ok;else echo bad;fi ok [hadoop@centos-Reall-131 shtest]$ if [[ a = b && b = b ]]; then echo ok;else echo bad;fi bad [hadoop@centos-Reall-131 shtest]$ if [[ a = b || b = b ]]; then echo ok;else echo bad;fi ok
3:常用判斷運算符
字符串比較:= ,!= ,-z 字符串長度是為0返回true,-n 字符串長度是不為0返回true,這里不包括空格的情況。
[hadoop@centos-Reall-131 shtest]$ if [ 'aa' = 'bb' ]; then echo ok; else echo bad;fi #引號可有可無,當然在進行比較時最好使用引號更好表示。
bad [hadoop@centos-Reall-131 shtest]$ if [ -n "aa" ]; then echo ok; else echo bad;fi ok [hadoop@centos-Reall-131 shtest]$ if [ -z "" ]; then echo ok; else echo bad;fi ok
整數比較:
-lt 小於
-le 小於等於
-eq 等於
-gt 大於
-ge 大於等於
-ne 不等於
文件判斷:
-d 是否為目錄
-f 是否為文件
-e 是否存在
[hadoop@centos-Reall-131 shtest]$ if [ -d /home/hadoop ]; then echo ok; else echo bad;fi ok [hadoop@centos-Reall-131 shtest]$ if [ -f /home/hadoop/ ]; then echo ok; else echo bad;fi bad [hadoop@centos-Reall-131 shtest]$ if [ -e /home/hadoop/ ]; then echo ok; else echo bad;fi ok
路徑必須找得到,如果沒有找到指定路徑的文件,則判斷條件就為false。
while語法
i=1 while ((i<=3)) do echo $i let i++ #(等價((i++))) done
case語法
case $1 in start) echo "starting" ;; stop) echo "stoping" ;; *)#其他條件都不匹配下,執行該 echo "Usage: {start|stop}" esac
for語法
1、方式一
N=1
for N in 1 2 3 do echo $N done 或 N=1 for N in 1 2 3; do echo $N; done 或 N=1 for N in {1..3}; do echo $N; done #(代表1到3之間的數字)
2、方式二
for ((i = 0; i <= 5; i++)) do echo "welcome $i times" done
或
for ((i = 0; i <= 5; i++)); do echo "welcome $i times";done

