位置變量在Shell腳本編程中的作用

位置變量:

        如果要向一個shell腳本傳遞信息,可以使用位置參數完成此功能;參數相關數目傳入腳本,此數目可以任意多,但只有前9個可以被訪問,使用shift命
令可以改變這個限制;參數從第一個開始,在第九個結束;每個訪問參數前要加$符號;第一個參數為0,表示預留保存實際腳本名字;無論腳本是否有參數,此值
均可用.

變量名:

$0,

$1,

$2,

$3,

$4,

$5,

$6,

$7,

$8,

$9

說明:

$0: 表示腳本名稱。

$1,$2,…,$9:$1表示向腳本傳遞的第一個參數,$2表示向腳本傳遞的第二個參數,…,$9表示向腳本傳遞的第九個參數.

特殊變量(參數)

shell對一些參數做特殊處理,這些參數只能被引用而不能被賦值.

特定shell變量如下:

$# 傳遞到腳本的參數個數;

$* 以一個單字符串顯示所有向腳本傳遞的參數。與位置變量不同,此選項參數可超過9個;

$$ 腳本運行的當前進程ID號;

$! 后臺運行的最后一個進程的進程ID號;

$@ 與$*相同,但是使用時加引號,并在引號中返回每個參數;

$- 顯示shell使用的當前選項,與set命令功能相同;

$? 顯示最后命令的退出狀態.0表示沒有錯誤,其他任何值表明有錯誤;

示例:

[root@localhost bin]# cat test.sh
#!/bin/bash
#
#
#
#
echo "此腳本的名稱$0為:$0"
echo "此腳本的第一個位置參數$1為:$1"
echo "此腳本的第二個位置參數$2為:$2"
echo "此腳本的第三個位置參數$3為:$3"
echo "此腳本的第四個位置參數$4為:$4"
echo "此腳本的第五個位置參數$5為:$5"
echo "此腳本的第六個位置參數$6為:$6"
echo "此腳本的第七個位置參數$7為:$7"
echo "此腳本的第八個位置參數$8為:$8"
echo "此腳本的第九個位置參數$9為:$9"
echo "此腳本的第十個位置參數$10為:$10"
echo "此腳本的參數的個數為:$#"
echo "此腳本的所有參數為$*"
echo "此腳本的所有參數為$@"

此腳本輸出結果為:

[root@localhost bin]# pos.sh `seq 1 10`
此腳本的名稱/root/bin/pos.sh為:/root/bin/pos.sh
此腳本的第一個位置參數1為:1
此腳本的第二個位置參數2為:2
此腳本的第三個位置參數3為:3
此腳本的第四個位置參數4為:4
此腳本的第五個位置參數5為:5
此腳本的第六個位置參數6為:6
此腳本的第七個位置參數7為:7
此腳本的第八個位置參數8為:8
此腳本的第九個位置參數9為:9
此腳本的第十個位置參數10為:10
此腳本的參數的個數為:10
此腳本的所有參數為1 2 3 4 5 6 7 8 9 10
此腳本的所有參數為1 2 3 4 5 6 7 8 9 10

$* 和 $@ 的區別

$* 和 $@ 都表示傳遞給函數或腳本的所有參數,不被雙引號(" ")包含時,都以"$1" "$2" … "$n" 的形式輸出所有參數。

但是當它們被雙引號(" ")包含時,"$*" 會將所有的參數作為一個整體,以"$1 $2 … $n"的形式輸出所有參數;"$@" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出所有參數。

下面的例子可以清楚的看到 $* 和 $@ 的區別:

  1. #!/bin/bash

  2. echo "\$*=" $*

  3. echo "\"\$*\"=" "$*"


  4. echo "\$@=" $@

  5. echo "\"\$@\"=" "$@"


  6. echo "print each param from \$*"

  7. for var in $*

  8. do

  9. echo "$var"

  10. done


  11. echo "print each param from \$@"

  12. for var in $@

  13. do

  14. echo "$var"

  15. done


  16. echo "print each param from \"\$*\""

  17. for var in "$*"

  18. do

  19. echo "$var"

  20. done


  21. echo "print each param from \"\$@\""

  22. for var in "$@"

  23. do

  24. echo "$var"

  25. done

執行 ./test.sh "a" "b" "c" "d",看到下面的結果:

$*=  a b c d
"$*"= a b c d
$@=  a b c d
"$@"= a b c d
print each param from $*
a
b
c
d
print each param from $@
a
b
c
d
print each param from "$*"
a b c d
print each param from "$@"
a
b
c
d

原創文章,作者:YOUNG,如若轉載,請注明出處:http://www.www58058.com/35639

(0)
YOUNGYOUNG
上一篇 2016-08-15 12:10
下一篇 2016-08-15 12:10

相關推薦

  • Linux基礎知識—Vim編輯器/crond周期性任務計劃

    vim文本編輯 vim是vi文本編輯的增強版本,因其編輯功能強大、且支持各種語言開發環境關鍵字自動增亮功能,也可稱為是開發工具。在Centos7/RHEL7開始,默認將vi定義成vim –color=auto,已經取代了vi的地位。下面總結下關于vim工具的使用 vim有三種模式,每個模式下有其特定的功能;我們可自由在三者之間切換使用: COMM…

    Linux干貨 2016-11-01
  • iptables/netfilter入門到進階

    一、iptables/netfilter的簡介: iptables:規則管理工具;該系統工具有利于在 Linux 系統上更好地控制 IP 信息包過濾和防火墻配置。防火墻在做信息包過濾決定時,有一套遵循和組成的規則,這些規則存儲在專用的信息包過濾表中,而這些表集成在 Linux 內核中。在信息包過濾表中,規則被分組放在我們所謂的鏈(chain)中。而netfi…

    Linux干貨 2017-05-03
  • 優云Automation:實現IT服務彈性伸縮的利器

    隨著互聯網業務快速持續增長,IT資源使用量按需變化成為常態,這就要求信息部門能快速響應資源使用的變化要求,對運維提出不小挑戰。比如電商、在線教育等企業經常推出一些秒殺、搶紅包活動,在特定時間段對資源的利用處于高峰期,之后基本處于空閑。 幾年前,我們從申請采購到應用部署上線都只能人工操作,需要提前幾個月開始規劃。如今通過云平臺能很好實現資源按需動態管理,運維人…

    系統運維 2017-03-15
  • nginx AIO機制與sendfile機制

    nginx AIO機制與sendfile機制 從0.8.11版本開始, nginx 開始支持Linux native aio,如何在nginx里配置使用這套機制是本文介紹的重點。在下面的示例配置中,幾個重要相關選項的具體含義如下: aio: Syntax: aio on | off | sendfi…

    Linux干貨 2016-10-27
  • awk的進階

    前言 awk的中有很多的控制語句,awk也支持if語句,while語句,for語句等等編程邏輯充的控制語句及數組、函數。 awk的進階無非就是多練。 1.控制語句 (1)if-else語句 語句格式: if(condition) {statments}    if  (條件) 條件為真 執行{statments} 只有一個語句可…

    Linux干貨 2016-06-26
  • lamp簡介

    lamp 構建一個有著動態服務器端技術的網站 LAMP基礎 1)開源領域LAMP組成: L:Linux;A:apache (httpd);M:mysql, mariadb;P:php, perl, python httpd:接收用戶的web請求;靜態資源則直接響應;動態資源為php腳本交由php來運行; php:運行p…

    Linux干貨 2016-11-07

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-16 14:51

    對各變量總結的很清晰,也通過寫腳本加深自己對變量的理解,課堂練習需要認真完成哦,

欧美性久久久久