2011-08-31 61 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 

類似

相關問題