關於Shell中的位置引數變數

2021-06-17 19:06:04 字數 1344 閱讀 6572

位置引數是一種在呼叫shell程式的命令列中按照各自的位置決定的變數,是在程式名之後輸入的引數,它們分別標識了使用者輸入的整個命令列中以空格分隔開的字串,其中,$1標識第乙個位置的引數,$2標識第二個,以此類推。

其中,$0是乙個特殊的變數,它的內容是當前這個shell程式的檔名,所以,它不是乙個位置引數,在顯示當前所有的位置引數時是不包括在內的。

位置引數的值可以用$n得到,n是乙個數字,如果為1即$1,類似c語言中的陣列,linux會把輸入的字串分段並給每段進行編號,編號從0開始,第0號為程式名字,從1開始就表示傳遞給程式的引數。

特殊變數$*和$@表示所有的位置引數。

上述過程中的$0是乙個內部引數,它是必須的,而$1則可有可無。和$0一樣的內部變數還有以下幾個:

$# —— 傳遞給程式的總的引數數目。

$? —— 上乙個**或者shell程式在shell中退出的情況,如果正常退出則返回0,否則返回非0值。

$* —— 傳遞給程式的所有引數組成的字串。

$n ——表示第n個引數,$1則表示第乙個引數,$2表示第二個引數……

$0 —— 當前程式的名稱。

$@ ——以「引數1」、「引數2」……儲存所有的引數。

$$ —— 本程式的(程序id)pid。

$! —— 上乙個命令的pid。

下面的乙個shell程式,演示了位置引數變數的使用:

使用下面的引數呼叫這個程式:

常規情況下位置引數變數可以標識9個引數。如果引數變數超過9個,在標準情況下,第九個及其以後的引數將作為乙個字串賦給$9變數。例如:

在這個指令碼程式執行的過程中,$9變數所代表的值將是「9 f1 f2」這個字串。那麼如何把9.f1.f2這三個變數分離出來呢?shell提供了shift命令來完成這個工作。

shift命令把引數列表向前移動一位,即每次執行一次shift命令,第乙個引數就被擠掉,而後面的引數依次前移乙個位置。如修改 sharg.sh指令碼檔案為:

然後執行:

由上圖執行結果顯示可知,當執行了兩次shift命令後,$2的值由f2替代了90,即引數列表依次前移了兩位。通過這樣的方法,即可獲得多於9個的引數傳遞值。

shell 位置引數變數

n 0代表命令本身 1 9 代表第乙個到第九個引數 第十個引數 eg bin bash num1 1 num2 2 sum 1 2 echo sum 命令執行中的所有引數 乙個整體 執行中所有引數 單個引數 執行中的引數個數 bin bash for i in do 所有引數當成乙個整體迴圈一次 1...

shell的位置引數和特殊變數

shell中有很多自動複製的變數 常用的位置引數和特殊變數有 0 相當於c語言main函式的argv 0 1 2 3.位置引數,相當於argv 1 argv 2 argv 3 相當於argv 1 表示引數列表 可以用做for的遍歷 表示引數列表 上一條命令的exit status 0為真 非0為假 ...

shell語法(位置引數和特殊變數)

位置引數 0相當c的main函式argv 0 1 2 位置引數,相當於argv 1 argv 2 相當於 argc 1 表示引數列表 上一條命令的退出碼 當前shell的程序號 bin bash echo 0 0 echo 1 1 echo 2 2 echo 3 3 echo echo echo e...