您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Linux下shell位置參數怎么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
之前我們一直沒有涉及程序接收和處理命令行選項以及參數的能力。本章節將講述允許程序訪問命令行內容的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 = $3 10 \$4 = $4 11 \$5 = $5 12 \$6 = $6 13 \$7 = $7 14 \$8 = $8 15 \$9 = $9 16 "
這個簡單的腳本展示了從變量到9的值。在沒有任何命令行參數的情形下執行此腳本結果如下所示:
即便沒有提供任何實參,變量$0總是會儲存有命令行顯示的第一項數據,也就是所執行程序所在的路徑名。現在讓我們看看,看一下提供實參情形下的程序執行結果。
注意,使用參數擴展技術,用戶實際可以獲取多于9個的參數。為標明一個大于9的數字,將數字用大括號括起來,例如{11}, ${888}等。
shell還提供了變量$#以給出命令行參數的數目。如下代碼所示:
#!/bin/bash # posit-param: script to view command line parameters echo "Number of arguments: $#" echo " \$0 = $0 \$1 = $1 \$2 = $2 \$3 = $3 \$4 = $4 \$5 = $5 \$6 = $6 \$7 = $7 \$8 = $8 \$9 = $9 "
以上程序運行結果如下所示:
但是如果給程序提供大量的實參會發生什么呢?如下所示:
在本例中,通配符“*”擴展為26個實參。怎么樣才可以處理這么多參數呢?shell提供了一種略顯笨拙的處理方法。每次執行shift命令后,所有參數的值均“下移一位”。實際上,通過shift命令我們就可以只處理一個參數(之外的一個參數,0值恒定)而完成全部程序任務。如下程序:
#!/bin/bash # shift.sh: script to display all arguments count=1 while [[ $# > 0 ]]; do echo "Argument $count = $1" count=$((count + 1)) shift done
每當執行一次shift命令時,變量的值就賦值給1,而的值則賦給變量2,依次類推。變量$#的值同時減去1。故以上代碼的執行結果如下圖所示:
就像位置參數可用于向shell腳本傳遞參數一樣,位置參數也可用于shell函數實參的傳遞,如以下腳本所示:
1 file_info() { 2 if [[ -e "$1" ]]; then 3 echo "File Type:" 4 file "$1" 5 echo "File Status:" 6 stat "$1" 7 else 8 echo "$FUNCNAME: usage: $FUNCNAME file" >&2 9 return 1 10 fi 11 }
現在,如果一個包含了file_info函數的腳本以一個文件名為實參調用file_info,則此實參就被傳遞給file_info函數。
在這樣的條件下,我們就可以寫出很多不僅普通腳本可使用,而且.bashrc文件也同樣適用的有用的shell函數。
此外,這里需要注意的是FUNCNAME的shell變量,shell自動更新FUNCNAME以追蹤當前執行的shell函數。
關于“Linux下shell位置參數怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。