Linux
bash : ‘set -e’ 並檢查使用者是否存在 make script exit
我正在編寫一個腳本來使用 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
是複合命令的一部分,因此腳本在失敗時不會退出。)