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

 

原文和做者一塊兒討論: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。

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
相關文章
相關標籤/搜索