[英]How to handle errors in shell script
我正在編寫Shell腳本來安裝我的應用程序。 我的腳本中有更多命令,例如復制,解壓縮,移動,如果等等。 如果任何命令失敗,我想知道該錯誤。 我也不想發送零以外的退出代碼。
腳本安裝順序(root-file.sh):
./script-to-install-mongodb
./script-to-install-jdk8
./script-to-install-myapplicaiton
示例腳本文件:-
cp sourceDir destinationDir
unzip filename
if [ true]
// success code
if
我想通過使用變量或任何消息來了解我的腳本命令是否在root-file.sh中失敗。
我不想編寫代碼來檢查每個命令狀態。 有時cp或mv命令可能由於目錄無效而失敗。 在腳本執行結束時,我想知道所有命令都已成功執行還是出錯?
有辦法嗎?
注意:我使用的是Shell腳本而不是bash
/ *最后一個命令的狀態存儲在特殊變量$?中,您可以為$?定義變量。 做出口var = $? * /
unzip filename
export unzipStatus=$?
./script1.sh
export script1Status=$?
if [ !["$unzipStatus" || "$script1Status"]]
then
echo "Everything successful!"
else
echo "unsuccessful"
fi
linux shell腳本中的異常處理可以如下進行
command || fallback_command
如果您有多個命令,則可以執行
(command_one && command_two) || fallback_command
在這里fallback_command
可以是文件中的echo
或log
詳細信息等。
我不知道您是否嘗試過將set -x
放在腳本頂部以查看詳細的執行情況。
當您使用Shell腳本實現此功能時,沒有太多外部工具。 那么默認的$? 應該有所幫助。 您可能要檢查腳本之間的檢索值。 該代碼將如下所示:
./script_1
retval=$?
if $retval==0; then
echo "script_1 successfully executed ..."
continue
else;
echo "script_1 failed with error exit code !"
break
fi
./script_2
讓我知道這是否為您的方案增加了任何價值。
要在這里給我2美分。 像這樣運行你的shell
sh root-file.sh 2> errors.txt
來自errors.txt的grep模式
grep -e "root-file.sh: line" -e "script-to-install-mongodb.sh: line" -e "script-to-install-jdk8.sh: line" -e "script-to-install-myapplicaiton.sh: line" errors.txt
上面的grep命令的輸出將顯示其中有錯誤的命令以及行號。 可以說輸出是:
test.sh:第8行:file3:權限被拒絕
您可以去檢查出現問題的行號(這里是8)。 請參考此行號。 在vi中 。
或者這也可以是自動化的: 您的shell腳本中grep特定行。 grep行在這里有問題8 。
head -8 test1.sh |tail -1
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.