2015-10-09 130 views
1

我有一個超過20個網絡設備的備份運行配置備份服務器的系統。在服務器端,我必須檢查備份作業是否仍在工作。所以我有這個腳本:用很多參數運行bash腳本

SHELL=/bin/bash 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 

device="$1" 
backupdir="/backup/$device" 
latestbackup="`find $backupdir -mmin -1440 -name "$device*"`" 
if [[ -f $latestbackup ]]; 
then 
    echo "`date` - $device - latest backup is $latestbackup" 
else 
    echo "`date` - $device - backup not working" 
fi 

,所以我可以運行此腳本下面的語句:

./backup.sh router1 

反正有提供這方面的腳本與更多的參數呢? (20),如:

for x in router1 router2 router3 ...; do ./backup.sh $x; done; 

回答

0

你可以在這裏使用[email protected]特殊參數 - 這代表了整個論點:

./backup.sh router1 router2 router3 ... 
+0

感謝@aguibert,這是完美的 – salvation3103

+3

雖然'$ @'可能適用於這種特殊情況,但通常建議使用'「$ @」' - 注意括起來的雙引號 - 強健,因爲只有這樣才能確保將命令行的原始分區保存到參數中。術語問題:'$ @'是Bash中的_special參數,而不是_operator_。 – mklement0

+1

謝謝@ mklement0,更新了我的答案。不知道「$ @」'是首選的,因爲它在我最初測試時仍然有效,但您的解釋是有道理的。 –

2

您可以在一個循環中與其他參數運行腳本,每次字符串(第一個參數及更高版本)與for循環結合使用。

的代碼應該是這樣的:

SHELL=/bin/bash 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 

for device in "[email protected]"; do 
    backupdir="/backup/$device" 
    latestbackup="`find $backupdir -mmin -1440 -name "$device*"`" 
    if [[ -f $latestbackup ]]; 
    then 
    echo "`date` - $device - latest backup is $latestbackup" 
    else 
    echo "`date` - $device - backup not working" 
    fi 
done 
+1

以務實的替代不必修改腳本。 – mklement0

+1

@ mklement0如果它不止一次地使用這個腳本,我會改變腳本,但是對於「one off」,我會用上面的一行代碼來破解它); – alfasin

+1

完全同意;這正是我在評論中試圖表達的觀點;不幸的是,有人投下你的答案。 – mklement0