歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

Shell編程之條件測試

shell編程中,當使用if語句時,總是涉及到條件的判斷。下面來討論下條件判斷的各種情況。

1. 條件為語句
例如:當目錄下有sam開頭的文件時,輸出hi,it's here.
if ls sam* &> /dev/null; then
    echo "Hi,it's here."
fi

當條件為語句時,直接跟在if後面,如果語句執行成功,返回0,表示真,然後執行語句塊中的語句。

再來個例子,查看本機中是否有hive的用戶,如果有,顯示hive的uid和bash類型。
if grep "^hive" /etc/passwd; then
    grep "^hive" /etc/passwd | cut -d: -f1,3,7
fi

2. 條件為變量判斷時
即判斷某個變量是否符合某個條件的時候,判斷語句有下面三種類型
[ expression ]
[[ expression ]]
test expression
根據變量類型,分為以下幾種情況討論:
(1) 整數測試
當變量為整數時,可以選擇[ expression ]這種格式的語句。
expression可以寫成這樣:數值1 比較符號 數值2($A 比較符號 $B)
比較符號有下面這些:
大於:-gt, 例如 $A -gt $B
大於或等於:-ge
等於:-eq
小於:-lt
小於或等於:-le
不等於:-ne
還是看例子吧
例1;寫一個腳本,生成兩個隨機數,比較其大小;顯示大數;
bash有個內置變量:$RANDOM
#!/bin/bash
#
A=$RANDOM
B=$RANDOM
if [ $A -ge $B ]; then
  echo "Max number is $A."
else
  echo "Max number is $B."
fi

例2:寫一腳本,隨機生成一個整數,判定,顯示其奇偶性
#!/bin/bash
#
A=$RANDOM
if [ $[$A%2] -eq 0 ]; then
  echo "$A: Even"
else
  echo "$A: Odd"
fi

(2) 字符測試
變量為字符時,進行字符測試。
bash字符測試時,從左至右逐字符比較
>: 大於
<: 小於
==: 等於 (前三者用的格式都是[ expression ])
=~: 判斷左邊的字符串是否能夠被右邊的模式所匹配;通常用於[[ expression ]];
[[ $opt1 =~ $opt2 ]],一般做行首、行尾錨定;不要加引號;

單目:
-z $STRING: 為空則為真,不空則為假;
-n $STRING: 為空則為假,不空則真;


例1:寫一個腳本,判定用戶的shell是否為bash
#!/bin/bash
#
Shell=`grep "^$1:" /etc/passwd | cut -d: -f7`
if [ -z $Shell ]; then
    echo "No such user or User's shell is null."
    exit 10
fi
if [ "$Shell" == "/bin/bash" ]; then
    echo "Bash User."
    Ret=0
else
    echo "Not Bash User."
    Ret=9
fi
exit $Ret

例2:通過參數傳遞一個字符串給腳本,如果傳遞的字符串為“memory”或“Memory”,就以MB為單位顯示當前主機的內存信息
#!/bin/bash
#
if [[ $1 =~ [Mm]emory$ ]]; then
  free -m
else
  cat /proc/uptime
fi

Copyright © Linux教程網 All Rights Reserved