set -u
當腳本中遇到未定義的變量時挡鞍,默認是忽略兽间。
有時候這并不是開發(fā)者想要的。
假如有未定義的變量价匠,應(yīng)該報錯当纱,并且終止腳本繼續(xù)運行。
set -u
就可以辦到
示例
#!/usr/bin/env bash
set -u
echo $a
echo shark
執(zhí)行報錯
$ bash set.sh
set.sh: line 13: a: unbound variable
set -x
這個調(diào)試腳本是使用踩窖,可以看到每個執(zhí)行的命令坡氯,和執(zhí)行命令后的輸出結(jié)果。
#!/usr/bin/env bash
set -x
echo shark
和 bash -x set.sh
相同的含義洋腮。
set -e
腳本中有任何命令的返回值是非零箫柳,腳本則停止繼續(xù)執(zhí)行。
對管道的命令無效啥供,比如:
foo | echo shark
foo 不是 shell 中的命令悯恍,執(zhí)行會報錯,但是其后面有個管道伙狐,最終管道后的 echo 命令執(zhí)行成功了,這種情況下 腳本會繼續(xù)執(zhí)行涮毫。
set -o pipefail
如果設(shè)置,如果管道中的所有命令都成功退出贷屎,則返回零罢防。 默認情況下禁用此選項
心得
set -u
腳本遇到未定義的變量是,默認是忽略唉侄。
而
set -u
在腳本中設(shè)置之后咒吐,若有未定義的變量,則會報錯属划,并終止腳本繼續(xù)運行
該參數(shù)可以寫在腳本中
set -x調(diào)試命令
該命令可以在執(zhí)行腳本時加入恬叹,此時會顯示腳本執(zhí)行的順序,相當于java的debug過程榴嗅。
寫在腳本中和bash -x script.sh
相同的含義