標籤:
十年營運系列之基礎篇 - Linux
曾林
聯絡:[email protected]
網站:www.jplatformx.com
著作權:文章未經同意請勿轉載
一、引言
之前我們一直沒有涉及程式接收和處理命令列選項以及參數的能力。本章節將講述允許程式訪問命令列內容的shell功能。
二、訪問命令列
shell提供了一組名為位置參數的變數,用於儲存命令列中的關鍵字,這些變數分別命令為0~9。可以通過以下方法展示這些變數。
1 #!/bin/bash 2 3 # posit-param: script to view command line parameters 4 5 echo " 6 \$0 = $0 7 \$1 = $1 8 \$2 = $2 9 \$3 = $310 \$4 = $411 \$5 = $512 \$6 = $613 \$7 = $714 \$8 = $815 \$9 = $916 "
這個簡單的指令碼展示了從變數$0到$9的值。在沒有任何命令列參數的情形下執行此指令碼結果如下所示:
即便沒有提供任何實參,變數$0總是會儲存有命令列顯示的第一項資料,也就是所執行程式所在的路徑名。現在讓我們看看,看一下提供實參情形下的程式執行結果。
注意,使用參數擴充技術,使用者實際可以擷取多於9個的參數。為標明一個大於9的數字,將數字用大括弧括起來,例如${10}, ${11}, ${888}等。
三、確定實參的數目
shell還提供了變數$#以給出命令列參數的數目。如下代碼所示:
#!/bin/bash# posit-param: script to view command line parametersecho "Number of arguments: $#"echo "\$0 = $0\$1 = $1\$2 = $2\$3 = $3\$4 = $4\$5 = $5\$6 = $6\$7 = $7\$8 = $8\$9 = $9"
以上程式運行結果如下所示:
四、shift——處理大量的實參
但是如果給程式提供大量的實參會發生什麼呢?如下所示:
在本例中,萬用字元“*”擴充為26個實參。怎麼樣才可以處理這麼多參數呢?shell提供了一種略顯笨拙的處理方法。每次執行shift命令後,所有參數的值均“下移一位”。實際上,通過shift命令我們就可以只處理一個參數($0之外的一個參數,$0值恒定)而完成全部程式任務。如下程式:
#!/bin/bash# shift.sh: script to display all argumentscount=1while [[ $# > 0 ]]; do echo "Argument $count = $1" count=$((count + 1)) shiftdone
每當執行一次shift命令時,變數$2的值就賦值給$1,而$3的值則賦給變數$2,依次類推。變數$#的值同時減去1。故以上代碼的執行結果如所示:
(031) Linux之shell位置參數