Linux之shell編程條件判斷-if,while,for,case


 

原文和作者一起討論:http://www.cnblogs.com/intsmaze/p/6675350.html

微信:intsmaze

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM