shell 指令碼編寫 if else then

2022-07-25 08:39:08 字數 1680 閱讀 9301

if ....; then

elif ....; then

else

fi大多數情況下,可以使用測試命令來對條件進行測試。比如可以比較字串、判斷檔案是否存在及是否可讀等等…   通常用" [ ] "來表示條件測試。注意這裡的空格很重要。要確保方括號的空格。

[ -f "somefile" ] :判斷是否是乙個檔案

[ -x "/bin/ls" ] :判斷/bin/ls是否存在並有可執行許可權

[ -n "$var" ] :判斷$var變數是否有值

[ "$a" = "$b" ] :判斷$a和$b是否相等          -r file     使用者可讀為真

-w file     使用者可寫為真

-x file     使用者可執行為真

-f file     檔案為正規檔案為真

-d file     檔案為目錄為真

-c file     檔案為字元特殊檔案為真

-b file     檔案為塊特殊檔案為真

-s file     檔案大小非0時為真

-t file     當檔案描述符(預設為1)指定的裝置為終端時為真 

對於不含變數的任務簡單shell指令碼一般能勝任。但在執行一些決策任務時,就需要包含if/then的條件判斷了。shell指令碼程式設計支援此類運算, 包括比較運算、判斷檔案是否存在等。基本的if條件命令選項有: - eq —比較兩個引數是否相等(例如,if [ 2 –eq 5 ])

-ne —比較兩個引數是否不相等

-lt —引數1是否小於引數2

-le —引數1是否小於等於引數2

-gt —引數1是否大於引數2

-ge —引數1是否大於等於引數2

-f — 檢查某檔案是否存在(例如,if [ -f "filename" ])

-d — 檢查目錄是否存在

幾乎所有的判斷都可以用這些比較運算子實現。指令碼中常用-f命令選項在執行某一檔案之前檢查它是否存在。

## #!/bin/sh

today=`date -d yesterday +%y%m%d`

file="apache_$today.tar.gz"

cd /home/chenshuo/shell

if [ -f "$file" ];then

echo "ok"

else

echo "error $file" >error.log

mail -s "fail backup from test" [email protected] fi

其他:整數比較

-eq 等於,如:if [ "$a" -eq "$b" ]

-ne 不等於,如:if [ "$a" -ne "$b" ]

-gt 大於,如:if [ "$a" -gt "$b" ]

-ge 大於等於,如:if [ "$a" -ge "$b" ]

-lt 小於,如:if [ "$a" -lt "$b" ]

-le 小於等於,如:if [ "$a" -le "$b" ]

大於(需要雙括號),如:(("$a" > "$b"))

>= 大於等於(需要雙括號),如:(("$a" >= "$b"))

小資料比較可使用awk

字串比較

= 等於,如:if [ "$a" = "$b" ]

== 等於,如:if [ "$a" == "$b" ],與=等價

編寫Shell指令碼

獲取變數的方式 1 echo path 2 echo 3 echo path 引數的提取 引數的個數 n 第n個引數 0 當前指令碼名稱 取出所有引數 shift 引數左移 執行過程 2 編寫指令碼內容 單獨講解 3 新增執行許可權 chmod a x abc.sh 4 當前目錄執行 abc.sh ...

Shell 指令碼編寫

shell 指令碼與 windows dos 下的批處理相似,也就是用各類命令預先放入到乙個檔案中,方便一次性執行的乙個程式檔案,主要是方便管理員進行設定或者管理用的。但是它比 windows 下的批處理更強大,比用其他程式設計程式編輯的程式效率更高,它使用了 linux unix 下的命令。方法一...

shell指令碼編寫

echo echo n不換行輸出,echo e會處理特殊字元,比如有 n則會換行 printf 不自動換行輸出 print 自動換行輸出 傳遞到指令碼的引數個數 以乙個單字串顯示所有向指令碼傳遞的引數。指令碼執行的當前程序id號 後台執行的最後乙個程序的id號 與 相同,但是使用時加引號,並在引號中...