Linux

bash : ‘set -e’ 並檢查使用者是否存在 make script exit

  • November 9, 2012

我正在編寫一個腳本來使用 Bash 安裝程序。我想在出錯時退出,所以我添加set -e到腳本的開頭。

我必須檢查我的腳本中是否存在使用者。為此,我正在使用grep ^${USER}: /etc/passwd. 如果使用者存在,則腳本正常執行。但是,如果使用者不存在,則此命令退出。如果後一種情況發生,我不想退出。相反,我想創建使用者並繼續我的安裝。

使我的腳本繼續執行的解決方案是什麼?我試圖將輸出重定向grep到一個變數,但我仍然遇到同樣的問題。

你總是可以做類似下面的事情。基本上禁用您正在執行的命令的退出檢查。

#!/bin/bash
set -e # eanble exit checking
lorem ipsum 
dolor sit amet
# temp disable exit checking
set +e
grep "^${USER}:" /etc/passwd
set -e
consectetur adipiscing elit

除了已經給出的建議,這裡還有兩個選擇。首先,您可以提供一個可以保證成功的替代命令:

grep "^${USER}:" /etc/passwd || true

(基本上,如果grep命令失敗,它會執行true,因為它總是成功,它會認為複合命令已經成功並且不會退出腳本。)

或者,由於您的興趣是 grep 是否成功(即是否需要添加使用者),只需將其用作if語句中的條件:

if ! grep "^${USER}:" /etc/passwd; then
   # Create the user account
fi
# Continue installation...

(請注意,命令!之前的grep命令否定測試,因此它僅在失敗時執行 if 語句的主體grep。由於grep是複合命令的一部分,因此腳本在失敗時不會退出。)

引用自:https://serverfault.com/questions/377092