2011-08-31 59 views
4

在回答前一个问题:如何在bash中“尝试做某件事,然后检测它是否失败”?

How can I use 'do I have root access?' as a conditional in bash?

的建议,“尽量做一些事情,如果它不能检测”而不是“检查许可,再做事”

我发现充足的理由对这个如:

但是,我发现很少有关于如何在bash中实现try/catch的清晰信息。我猜想,这是太容易了,除了使用函数或其他脚本什么我发现似乎相当complicated-:

我是比较新的,但来砸困惑在其他语言中没有类似于try函数的简单功能。

具体而言,我想做到以下几点:

CMD=`./path/to/script.sh` 
if [ <echo $CMD | grep error is true> ]; then 
     .. do this .. 
else 
     .. do that .. 
fi 

回答

5
if sudo chmod a-x /etc/shadow 2>/dev/null 
then : Yes - I have root permissions 
else : No - I do not have root permissions or /etc/shadow does not exist or ... 
fi 

这个选择,做任何损害,如果它成功(影子密码文件不应该执行的操作,你可以做如chmod o-w / - 如果您愿意,可以从根目录中删除公共写入权限),并通过查看命令的退出状态来检查它是否有效。这抛出了错误信息 - 你必须决定是否重要。

'sudo'在那里提升特权;如果你认为用户应该已经是'root',那么就省略'sudo'。

1

Bash依赖于退出状态所以没有任何try/catch等效。但它仍然非常适合您的需求。

对于简单的情况下,可以使用

[[ your_test_expression ]] && commands 

这相当于

if [[ your_test_expression ]]; then 
    commands 
fi 

If使用的 “退出状态”[[...]]所以实际上你可以使用任何命令在if之后。只要确保你的控制逻辑取决于命令的退出状态。

对于复杂的情况,您仍然需要如果case语句来表达您的逻辑。

0

除非您所调用的脚本具有退出条件,否则您可以做的事情不多。但是在bash手册页中查找“set”。

set -e 

如果其中的简单命令失败,将导致脚本退出。您可以将它添加到示例中的script.sh的顶部,以使其在失败时退出。

也看看陷阱。我相信

trap 'exit 2' ERR 

类似

相关问题