2017-07-31 51 views
1

我正在編寫shell腳本來安裝我的應用程序。我的腳本中有更多的命令,例如複製,解壓縮,移動,if等等。如果任何命令失敗,我想知道錯誤。此外,我不想發送零以外的退出代碼。腳本安裝如何處理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腳本不是來砸

+0

'$?'給你最後執行的命令的狀態,我認爲你可以使用它...例如 - test -x if [$? -ne 0]然後回顯「文件不退出」退出0 fi – deepakl

+0

@karan - 如果我的解決方案已解決您的問題,請接受答案並投票表決! – JRG

回答

1

/*在特殊變量$您的最後一個命令存儲的狀態?您可以定義變量$?做出口var = $?在Linux shell腳本*/

unzip filename 
export unzipStatus=$? 
./script1.sh 
export script1Status=$? 
if [ !["$unzipStatus" || "$script1Status"]] 
    then     
     echo "Everything successful!"  
    else 
     echo "unsuccessful" 
fi 
+0

請參閱我更新的問題。 – karan

+0

@karan,我更新了我的答案。合乎邏輯的是,如果任何一個狀態不成功,最終的操作是不成功的。 –

+0

@karan,邏輯很簡單,你必須否定所有的邏輯或。 –

1

異常處理可如果你有多個命令,那麼你可以做

(command_one && command_two) || fallback_command 

這裏fallback_command可以做如下

command || fallback_command 

echolog文件中的檔案等等

我不知道您是否曾嘗試將set -x放在腳本的頂部以查看詳細的執行情況。

+0

請參閱我更新的問題。 – karan

+0

我的解決方案並不需要您檢查每個命令的狀態,但會方便您有一個回退命令,這樣您就可以在屏幕上回顯故障或成功或在日誌文件中記錄詳細信息以供日後查看。 – JRG

1

那麼,你正在使用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 

讓我知道這是否爲您的方案添加了任何值。

1

想在這裏給我2分錢。從ERRORS.TXT運行你的shell這樣

sh root-file.sh 2> 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:行:文件3:權限被拒絕

你可以隨便去檢查線路沒有(這8)有問題。請參閱此go to line no. in vi

或者這也可以是自動的:從您的shell腳本的grep特定行。 grep line with has issue here is 。

head -8 test1.sh |tail -1

希望它幫助。