判斷資料夾是否存在

底下示範一個簡單的shell script程式範列

檢查資料夾是否存在

#!/bin/bash
#bash script 簡單範例,判斷資料夾是否存在

#test -d /var/www/agi-bin/
#test -d /var/www/
#test 檔案或資料夾存在,則 $? 內容為0,反之若不存在則 $? 內容為1

if [ -d /var/www/agi-bin/ -o -d /var/www/ ] ; then
   # -o 為 or 縮寫,亦存在兩個條件,分別是 -d /var/www/agi-bin/ 和 /var/www/
   # 上面裡的[ -d /var/www/agi-bin/ ] 功能等同於 test -d /var/www/agi-bin/
   # $? 回傳值為0 則條件成立,執行 then 後面的內容
   # $? 回傳值為1 則條件不成立,直接執行 else 後面的內容

	echo "檢查資料夾有存在,可以開始搬移檔案"
	#mv agi-bin/* /var/www/agi-bin/
	#mv bin/ /var/www/

else

        echo "/var/www/agi-bin/ 該資料夾不存在,是否忘了安裝apache?"
        echo "請按 ctrl+c 來中止程式! 先安裝好 apache 再來"
        echo "若您確定已有安裝 apache 了,則可自己建此目錄 /var/www/agi-bin/"
        exit 0

fi

echo "程式繼續...."

以上是比較正規的寫法,若你判斷資料夾存與否之後要執行的指令比較少的話,你可以改用底下這種比較精簡的寫法

test -d /tmp/asteriskdb || mkdir /tmp/asteriskdb && cp -a /var/lib/asterisk/db/* /tmp/asteriskdb && chown -R asterisk.asterisk /tmp/asteriskdb
#以上這行指令是先判斷 /tmp/asteriskdb 此資料夾是否存在,若不存在則執行後面的 mkdir 指令, mkdir 執行成功的話則會接著執行 && 後面的指令,反之 && 後面的指令若有其中一個指令執行失敗的話,那麼在這個失敗指令後面的 && 所帶的指令都不會繼續執行下去。

說明:
例1:cmd1 && cmd2
簡單講就是&& 前面的指令cmd1執行成功($?=0),才會執行 && 後面的cmd2指令

例2:cmd1 || cmd2
說明: || 前面的指令cmd1執行失敗($?≠0),才會執行 || 後面的cmd2指令

這個 $?=0 等不等於零很不好記,教大家一個簡單的記法 0=ok 就很好記了

在執行 Shell Script 時,程式會自動產生一些變數:

變數名稱 說明
$? 表示上一個指令的離開狀況,一般指令正常離開會傳回 0。不正常離開則會傳回 1、2 等數值。
$$ 這一個 shell 的 process ID number
$! 最後一個在背景執行的程式的 process number
$- 這個參數包含了傳遞給 shell 旗標 (flag)。
$1 代表第一個參數,$2 則為第二個參數,依此類推。而 $0 為這個 shell script 的檔名。
$# 執行時,給這個 Shell Script 參數的個數
$* 包含所有輸入的參數,$@ 即代表 $1, $2,….直到所有參數結束。$* 將所有參數無間隔的連在一起,存成一個單一的參數。也就是說 $* 代表了 “$1 $2 $3…”。
$@ 包含所有輸入的參數,$@ 即代表 $1, $2,….直到所有參數結束。$@ 用將所有參數以空白為間隔,存在 $@ 中。也就是說 $@ 代表了 “$1” “$2” “$3″….。

[note]參考資料:twbsd.orgBash Shell Script教學與心得

分類: bash。這篇內容的永久連結

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *