2014-11-23 78 views
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 
+0

如何你坚持使用bash吗?我认为随着复杂性的增加,纯shell脚本开始崩溃,使用诸如Perl或Python之类的东西可以自行实现。 – Sobrique 2014-11-23 13:58:13

+0

有*没有理由*把'ls'命令放在一个字符串中,然后使用'eval'。不要这样做。另外当你可以直接从函数中返回值时,你为什么要这么做呢? – 2014-11-23 13:58:15

+0

你是否知道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

回答

0

可以使用测试命令

ls -l命令例如要检查是否两个源目录和目标目录存在,你可以使用以下两行做没有的功能和

test -d $source && test -d $destination 
status=$(echo $?) 
相关问题