0
我有一个函数'exit_status',它带有两个参数。 $ 1是一个目录(用于备份rsync脚本),$ 2(getStatus)用于设置$ 1上ls的退出状态并将该值返回给调用者。如果退出状态等于0,则备份将开始。在位置参数上退出ls命令的状态
我想重写这个函数,至少需要3个位置参数,源和目标路径并返回退出状态。我希望函数能够处理我想要传递两个以上目录的事件。也许我可能会传递几个源代码目录和一个目的地。
我没有设置函数返回退出状态,但我只是寻找最好的方法来检查所有目录有一个退出状态0为调用方执行备份。如果一个或多个目录具有非零返回退出。
#!/usr/bin/bash
# Drive paths
testOffSiteBkup1="/mnt/hotswp/testoffsitebkup1/"
exit_status() {
local _cmd="/bin/ls -al $1 > /dev/null"
local _getStatus=$2
eval $_cmd
local _status=$?
eval $_getStatus=$_status
}
exit_status $testOffSiteBkup1 getStatus
if [ $getStatus -eq 0 ] ; then
echo "$testOffSiteBkup1 is present."
rsync ......
else
echo "$testOffSiteBkup1 is NOT present."
exit
fi
如何你坚持使用bash吗?我认为随着复杂性的增加,纯shell脚本开始崩溃,使用诸如Perl或Python之类的东西可以自行实现。 – Sobrique 2014-11-23 13:58:13
有*没有理由*把'ls'命令放在一个字符串中,然后使用'eval'。不要这样做。另外当你可以直接从函数中返回值时,你为什么要这么做呢? – 2014-11-23 13:58:15
你是否知道shell中的'$?'变量?它是以前执行的cmd的返回值(0-255)。你可以总是捕捉并用条件逻辑处理它。作为最小的情况:'/ bin/ls nonesuch; ls_stat = $ ?; case $ ls_stat in 0)echo ok ;; *)echo err = $ ls_stat ;; esac'祝你好运。 – shellter 2014-11-23 14:47:09