有些指令碼中會看到這樣的語句:
[html]view plain
copy
print?
#!/bin/bash
set -e
command 1
command 2
...
exit 0
#!/bin/bash
set -e
command 1
command 2
...exit 0
「set -e」 這句語句告訴bash如果任何語句的執行結果不是true則應該退出。這樣的好處是防止錯誤像滾雪球般變大導致乙個致命的錯誤,而這些錯誤本應該在之前就被處理掉。如果要增加可讀性,可以使用set -o errexit,它的作用與set -e相同。
使用-e幫助你檢查錯誤。如果你忘記檢查執行語句的結果,bash會幫你執行。不幸的是,你將無法檢查$?,因為如果執行的語句不是返回0,bash將無法執行到檢查的**。你可以使用其他的結構:
[html]view plain
copy
print?
command
if [ "$?"-ne 0]; then
echo "command failed";
exit 1;
fi
command
if [ "$?"-ne 0]; then
echo "command failed";
exit 1;
fi
可被代替為:
[html]view plain
copy
print?
command ||
command ||
或者:
[html]view plain
copy
print?
if ! command; then
echo "command failed";
exit 1;
fi
if ! command; then
echo "command failed";
exit 1;
fi
command || true,或者你有一段很長的**,你可以關閉錯誤檢查(不使用set -e),但是我還是建議你保守地使用這個語句。
**:
詳解Unix Linux中Shell指令碼的輸入輸出
shell的i o語法比較複雜,難以理解,更難以正確使用。shell的輸入輸出語法有兩個難點 重定向和檔案描述符。我以前對shell指令碼輸入 輸出的理解也有錯誤。最近重新整理思路,決定寫一篇文章來總結i o重定向。一 先介紹幾個基本概念 1 檔案 file 在unix linux中,檔案型別有七種...
Unix Linux指令碼中 set e 的作用
編寫shell指令碼沒多久,對於其許多命令的具體用法還不太熟悉。最近剛好有需求,就嘗試用指令碼去實現。其中就有用到set e選項。在用這個命令之前,也查過其功能,描述比較簡單 就是當命令以非零狀態退出時,則退出shell。主要作用是,當指令碼執行出現意料之外的情況時,立即退出,避免錯誤被忽略,導致最...
Bash指令碼中的set命令
伺服器的開發和管理離不開 bash 指令碼,掌握它需要學習大量的細節。set命令是 bash 指令碼的重要環節,卻常常被忽視,導致指令碼的安全性和可維護性出問題。本文介紹它的基本用法,讓你可以更安心地使用 bash 指令碼。我們知道,bash 執行指令碼的時候,會建立乙個新的 shell。bash ...