2015-12-19 152 views
1

我有如下的shell腳本:

set -o nounset 
set -o errexit 
set -o xtrace 

if [ "$#" -ne 0 ] 
then 
    echo 'A message' 
    exit 1 
fi 

有人可以解釋的命令,尤其是調節器和"$#"部分?

回答

2

$#是傳遞給腳本參數的個數。

所以這

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

+0

很好的答案,謝謝 – Stefan

2

在bash中,$#保持的命令行參數的數量。在你的情況下,條件部分只會在有一些時纔會觸發。

我認爲非常類似的問題被回答here,第二或第三個答案符合您的問題。