位置變量在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
下一篇 2016-08-15

相關推薦

  • Linux系統命令格式及基礎命令、幫助信息。

    一、Linux系統上的命令使用格式 命令的語法通用格式:                 # COMMAND OPTIONS ARGUMENTS     &nb…

    Linux干貨 2016-10-30
  • 廣域網中的DNS服務

    拓撲圖                      創建主DNS:     配置文件/etc/named.conf&nbs…

    2017-04-15
  • 初識

    CPU:運算器、控制器、寄存器、緩存 分區不能直接被訪問,需要接口 磁盤0 第一分區  掛載mount      C 磁盤0 第一分區  掛載mount      C:\var 如果一個目錄沒有被分區單獨掛載,那么其數據存儲在父目錄所對應的…

    2017-07-11
  • Linux程序包管理(二)YUM使用

    YUM Linux程序包管理(二) 說完了程序包管理以及rpm的相關使用,接下來說說rpm的前端管理工具 YUM YUM是什么?    前面提到,yum是rpm程序包管理器的前端管理工具,那么yum到底是什么?又能做什么呢? YUM:yellow dog,Yellowdog Update Mod…

    Linux干貨 2016-06-01
  • “拆”解RAID工作原理

    一、什么是RAID RAID:Redundant Arrays of Inexpensive(Independent)Disks,廉價(獨立)的冗余磁盤陣列。1988年由加利福尼亞大學伯克利分校提出。使用多個相對便宜的磁盤通過某種方式組合成一個“陣列”,來提供更好的性能、冗余,或兩者同時提供。 性能提高:     &n…

    Linux干貨 2016-11-22
  • 系統之鍬sysdig:Linux服務器監控和排障利器

    當你需要追蹤某個進程產生和接收的系統調用時,首先浮現在你腦海中的是什么?你可能會想到strace,那么你是對的。你會使用什么樣的命令行工具來監控原始網絡通信呢?如果你想到了tcpdump,你又作出了一個極佳的選擇。而如果你碰到必須追蹤打開的文件(在Unix意義上:一切皆文件)的需求,可能你會使用lsof。 strace、tcpdump以及lsof,確實是些偉…

    Linux干貨 2015-02-09

評論列表(1條)

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

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

欧美性久久久久