2015-10-09 172 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