(031) Linux之shell位置參數

十年運維繫列之基礎篇 - Linuxshell

做者:曾林 bash

聯繫:1494445739@qq.com運維

網站:www.jplatformx.com函數

版權:文章未經贊成請勿轉載網站


1、引言

  以前咱們一直沒有涉及程序接收和處理命令行選項以及參數的能力。本章節將講述容許程序訪問命令行內容的shell功能。spa

 

2、訪問命令行

  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 "

  這個簡單的腳本展現了從變量$0到$9的值。在沒有任何命令行參數的情形下執行此腳本結果以下所示:code

  即使沒有提供任何實參,變量$0老是會儲存有命令行顯示的第一項數據,也就是所執行程序所在的路徑名。如今讓咱們看看,看一下提供實參情形下的程序執行結果。orm

  注意,使用參數擴展技術,用戶實際能夠獲取多於9個的參數。爲標明一個大於9的數字,將數字用大括號括起來,例如${10}, ${11}, ${888}等。blog

 

3、肯定實參的數目

  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
"

  以上程序運行結果以下所示:

 

4、shift——處理大量的實參

  可是若是給程序提供大量的實參會發生什麼呢?以下所示:

  在本例中,通配符「*」擴展爲26個實參。怎麼樣才能夠處理這麼多參數呢?shell提供了一種略顯笨拙的處理方法。每次執行shift命令後,全部參數的值均「下移一位」。實際上,經過shift命令咱們就能夠只處理一個參數($0以外的一個參數,$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命令時,變量$2的值就賦值給$1,而$3的值則賦給變量$2,依次類推。變量$#的值同時減去1。故以上代碼的執行結果以下圖所示:

 

5、在shell函數中使用位置參數

  就像位置參數可用於向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函數。

相關文章
相關標籤/搜索