linux 的結構化命令

1、if-then語句

格式如下:

if command
then
   commands
fi

或者
if command; then
   commands
fi

2、嵌套if

格式如下:

if command
then
  commands
else
  commands
  if command
  then
    commands
  fi
fi

或者
if command
then
  commands
elif command
then
  commands
fi

3、test命令

test命令的格式非常簡單,如下

test condition

condition 是test命令要測試的一系列參數和值。當用在if-then語句中時,test命令使用方式如下:

if test condition
then
   commands
fi

bash shell提供了另一種條件測試方法,無需在if-then語句中聲明test命令。

if [ condition ]
then
  commands
fi

方括號定義了測試條件,注意,第一個方括號和第二個方括號之前必須加上一個空格。

test命令可以判斷三類條件:

數值比較

字符串比較

文件比較

3.1、數值比較

比較 描述
n1 -eq n2 檢查n1和n2是否相等
n1 -ge n2 檢查n1是否大於等於n2
n1 -gt n2 檢查n1是否大於n2
n1 -le n2 檢查n1是否小於等於n2
n1 -lt n2 檢查n1是否小於n2
n1 -ne n2 檢查n1和n2是否不相等

3.2、字符串比較

比較 描述
str1 = str2 字符串是否相同
str1 != str2 字符串是否不相同
str1 < str2 字符串str1是否小於str2
str1 > str2 字符串str1是否大於str2
-n str1 檢查str1是否不爲空
-z str1 檢查str1是否爲空

注意:test命令 和測試表達式使用標準的數學比較符號表示字符串比較,而用文本代碼來表示數值比較。如果你對數值使用了數學運算符號,shell會將它們當成字符串值,可能無法得到正確的結果。

3.3、文件比較

[ -d FILE ] 如果 FILE 存在且是一個目錄則爲真。

[ -e FILE ] 如果 FILE 存在則爲真。

[ -f FILE ] 如果 FILE 存在且是一個普通文件則爲真。

[ -r FILE ] 如果 FILE 存在且是可讀的則爲真。

[ -s FILE ] 如果 FILE 存在且大小不爲0則爲真。

[ -w FILE ] 如果 FILE 如果 FILE 存在且是可寫的則爲真。

[ -x FILE ] 如果 FILE 存在且是可執行的則爲真。

[ -O FILE ] 如果 FILE 存在且屬有效用戶ID則爲真。

[ -G FILE ] 如果 FILE 存在且屬有效用戶組則爲真。

[ FILE1 -nt FILE2 ] 如果 FILE1 比 FILE2 要新,或者FILE1 存在且 FILE2 不存在則爲真。

[ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在則爲真。

[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的設備和節點號則爲真。

4、if-then的高級特性

bash shell提供了兩項可在if-then語句中使用的高級特性:

用於數學表達式的雙括號;

用於高級字符串處理功能的雙方括號。

4.1、使用雙括號

格式: (( expression ))

除了使用標準的數學運算符,雙括號命令中用到的其它運算符號如下:

var++  後增

var--  後減

++var  先增

--var  先減

!      邏輯求反

~      位求反

**     冪運算

<<     左位移

>>     右位移

&      按位與

|      按位或

&&     邏輯與

||     邏輯或

可以在if語句中用雙括號命令,也可以在腳本中的普通命令裏使用來賦值。

案例1:

cat test.sh
#!/bin/bash

val=10

if (( $val ** 2 >90 ))
then
   ((val2=$val**2))
  echo "the square of $val is $val2"
fi


輸出結果如下:
[root@localhost]# ./test.sh
the square of 10 is 100

注意:不需要將雙括號中表達式的大於號轉義,這是雙括號命令提供的另一個高級特性。

4.2、使用雙方括號

格式 : [[ expression ]]

雙方括號裏的expression使用了test命令中採用的標準字符串比較。但它提供了test命令爲提供的一個特性-模式匹配。

在模式匹配中,可以定義一個正則表達式來匹配字符串值。

案例2:

cat test2.sh
#!/bin/bash

if [[ $USER == r* ]]
then
   echo "Hello $USER"
else
   echo "sorry,i do not know you"
fi


輸出結果爲:
[root@localhost]# ./test2.sh
Hello root

在上面的腳本中,使用了雙等號,雙等號將右邊的字符串(r*)視爲一個模式,並應用模式匹配規則。

5、case命令

case variable in
pattern1|pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章