原文和做者一塊兒討論:http://www.cnblogs.com/intsmaze/p/6675350.htmlhtml
微信:intsmazeshell
if 語法格式編程
if condition then statements [elif condition then statements] [else statements ] fi
示例centos
vi if.shbash
#!/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:條件判斷基本語法oop
[ condition ] (注意condition先後要有空格)spa
#非空返回true,可以使用$?驗證(0爲true,1爲false)code
#空返回false,裏面條件爲空格也是叫空。htm
[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。
i=1 while ((i<=3)) do echo $i let i++ #(等價((i++))) done
case $1 in start) echo "starting" ;; stop) echo "stoping" ;; *)#其餘條件都不匹配下,執行該 echo "Usage: {start|stop}" esac
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之間的數字)
for ((i = 0; i <= 5; i++)) do echo "welcome $i times" done
或
for ((i = 0; i <= 5; i++)); do echo "welcome $i times";done