簡體   English   中英

如何處理Shell腳本中的錯誤

[英]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可以是文件中的echolog詳細信息等。

我不知道您是否嘗試過將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM