我有如下的shell腳本:
set -o nounset
set -o errexit
set -o xtrace
if [ "$#" -ne 0 ]
then
echo 'A message'
exit 1
fi
有人可以解釋的命令,尤其是調節器和"$#"
部分?
我有如下的shell腳本:
set -o nounset
set -o errexit
set -o xtrace
if [ "$#" -ne 0 ]
then
echo 'A message'
exit 1
fi
有人可以解釋的命令,尤其是調節器和"$#"
部分?
$#
是傳遞給腳本參數的個數。
所以這
if [ "$#" -ne 0 ]
檢查可確保在沒有傳遞參數,則腳本退出, 這意味着該腳本需要一個或多個參數。
在一個名爲my_script
簡單的腳本,有這樣的:
#!/bin/bash
echo $#
,並運行:
$ ./my_script # prints 0
$ ./my_script a b cde # prints 3
$ ./my_script 1 2 3 4 # prints 4
設定內置選項:
set -o unset
(equivale nt到set -u
):將未設置的變量視爲錯誤。
set -o errexit
(相當於set -e
):對錯誤立即退出。
set -o xtrace
(相當於set -x
):顯示擴展命令。通常用於調試shell腳本。
考慮一個名爲opt
證明這個簡單的腳本:
#!/bin/bash
set -e
set -u
set -x
cmd="ps $$"
${cmd}
echo $var # 'var' is unset. So it's an "error". Since we have
# 'set -o e', the script exits.
echo "won't print this
「
輸出類似:
+ cmd='ps 2885'
+ ps 2885
PID TTY STAT TIME COMMAND
2885 pts/1 S+ 0:00 /bin/bash ./s
./s: line 9: var: unbound variable
的前兩行中的輸出(與+
開始)是由於set -x
。
接下來的兩個是runnin的結果g ${cmd}
。
下一行是錯誤,發生的結果爲set -u
。
你可以閱讀更多有關set built-in options here。
在bash中,$#保持的命令行參數的數量。在你的情況下,條件部分只會在有一些時纔會觸發。
我認爲非常類似的問題被回答here,第二或第三個答案符合您的問題。
很好的答案,謝謝 – Stefan