【現(xiàn)學(xué)現(xiàn)忘&Shell基礎(chǔ)】— 16.位置參數(shù)變量

位置參數(shù)變量的作用主要用于腳本的傳參。

位置參數(shù)變量的名稱(chēng)和作用都是確定不能改變的,但是該變量的內(nèi)容是可以更改的,也就是變量的值坏匪。

位置參數(shù)變量如下:

位置參數(shù)變量 作用
$n n為數(shù)字,$0代表命令本身撬统,$1-$9代表(腳本命令后的)第一到第九個(gè)參數(shù)适滓,十以上的參數(shù)需要用大括號(hào)包含,如${10}恋追、${15}凭迹。
$* 這個(gè)變量代表命令行中所有的參數(shù),$*把所有的參數(shù)看成一個(gè)整體几于。
$@ 這個(gè)變量也代表命令行中所有的參數(shù)蕊苗,不過(guò)$@把每個(gè)參數(shù)區(qū)分對(duì)待。
$# 這個(gè)變量代表命令行中所有參數(shù)的個(gè)數(shù)沿彭。

1朽砰、位置參數(shù)變量$n

$n:n為數(shù)字,$0代表命令本身喉刘,$1-$9代表(腳本命令的)第一到第九個(gè)參數(shù)瞧柔,十以上的參數(shù)需要用大括號(hào)包含,如${10}睦裳、${15}造锅。(這個(gè)是一個(gè)典型的向Shell腳本當(dāng)中傳遞值的方式)

(1)示例

# 定義一個(gè)shell腳本,簡(jiǎn)單的計(jì)算器廉邑,求兩個(gè)數(shù)的和哥蔚。

[root@Lyl tmp]# vim count.sh

# 腳本內(nèi)容如下:

#!/bin/bash

# 給num1變量賦值是第一個(gè)參數(shù)
num1=$1 
# 給num2變量賦值是第二個(gè)參數(shù)
num2=$2

# 變量sum是變量num1加變量num2的(其實(shí)上邊的num1和num2的定義可以省略)
sum=$(($num1 + $num2))
# 注意:執(zhí)行count.sh腳本后的第一個(gè)參數(shù)會(huì)傳遞給$1,第二個(gè)參數(shù)會(huì)傳遞給$2蛛蒙,
# 然后$num1和$num2進(jìn)行求和糙箍,再賦值給sum變量。
# 但是Shell中自定義變量的默認(rèn)類(lèi)型是字符串類(lèi)型牵祟,
# 而我們傳入的兩個(gè)數(shù)字類(lèi)型的變量值深夯,Shell默認(rèn)都識(shí)別為字符串類(lèi)型。
# 而這個(gè)時(shí)候我們就需要$(( ))把這個(gè)兩個(gè)字符串類(lèi)型的數(shù)值括起來(lái)诺苹,
# Shell才能知道要進(jìn)行數(shù)值運(yùn)算咕晋,里邊的參數(shù)都是數(shù)值(Shell運(yùn)算符中會(huì)詳細(xì)講)。
# 而$( )是括系統(tǒng)命令的收奔,然后把該命令運(yùn)行的結(jié)果掌呜,賦值給前面的變量,這個(gè)我們要注意坪哄。


#打印變量sum的值
echo $sum
echo $0

# 執(zhí)行該腳本
[root@Lyl tmp]# chmod 755 count.sh 
[root@Lyl tmp]# ./count.sh 22 66
88
./count.sh

(2)總結(jié):

  • $1保存的是執(zhí)行Shell命令之后的第一個(gè)參數(shù)站辉,
  • $2保存的是執(zhí)行Shell命令之后的第二個(gè)參數(shù)呢撞,
  • $0代表執(zhí)行腳本的命令,如上邊的./count.sh饰剥。
  • 位置參數(shù)變量好處

    其作用就是把執(zhí)行腳本命令后輸入的參數(shù),傳入到腳本中摧阅,使腳本中的變量可以靈活取值汰蓉。

  • 位置參數(shù)變量的缺點(diǎn)

    如果是一個(gè)普通的Linux用戶,該腳本并不是自己寫(xiě)的棒卷。當(dāng)你獲得該腳本的時(shí)候顾孽,你是無(wú)法知道需要在腳本后邊是否加參數(shù),或者是加什么參數(shù)比规,腳本才能正確運(yùn)行若厚,是沒(méi)有任何提示的。

    所以用位置參數(shù)變量傳參蜒什,并不適合給普通用戶來(lái)使用测秸,一般是寫(xiě)的腳本自己用的時(shí)候,用的比較多灾常。

提示:

位置參數(shù)變量也可以給函數(shù)中傳參(其實(shí)就是自己給自己傳值)霎冯。

給普通用戶的腳本,傳參的方式用read钞瀑,會(huì)有提示沈撞,比較友好赃磨,我們之后說(shuō)明眨补。

2蹬癌、位置參數(shù)變量$*$@

$*:這個(gè)變量代表命令行中所有的參數(shù)泰佳,$*把所有的參數(shù)看成一個(gè)整體道伟。

$@:這個(gè)變量也代表命令行中所有的參數(shù)融击,不過(guò)$@把每個(gè)參數(shù)區(qū)分對(duì)待惠猿。

(1)用法

我們先寫(xiě)一個(gè)腳本來(lái)展示一下位置參數(shù)變量$*$@的用法:

# 定義一個(gè)腳本parameter.sh

[root@Lyl tmp]# vim parameter.sh


# 腳本內(nèi)容如下:

#!/bin/bash

# 使用$*代表所有的參數(shù)(所有參數(shù)整體對(duì)待)
echo "The parameters \$* is:$*"
# 使用也代表所有參數(shù)(所有參數(shù)分開(kāi)對(duì)待)
echo "The parameters \$@ is:$@"



# 執(zhí)行該腳本
[root@Lyl tmp]# chmod 755 parameter.sh 
[root@Lyl tmp]# ./parameter.sh 11 22 33 44
The parameters $* is:11 22 33 44
The parameters $@ is:11 22 33 44

我們可以看到位置參數(shù)變量$*$@俺孙,都把執(zhí)行腳本命令后邊帶的參數(shù)打印出來(lái)了凰盔。

(2)區(qū)別

位置參數(shù)變量$\*$@的區(qū)別是墓卦,$*把所有參數(shù)當(dāng)作一個(gè)整體,而$@是先把11賦值給$@户敬,在把22賦值給$@落剪,以此類(lèi)推,是分開(kāi)的尿庐。

我們通過(guò)下邊的例子來(lái)說(shuō)明:

# 我們先簡(jiǎn)單的來(lái)說(shuō)一下for循環(huán)
# 簡(jiǎn)單的for循環(huán)例子

for i in 1 2 3 4 
        do
            echo $i
        done

# 說(shuō)明:
# 在in后有幾個(gè)數(shù)或者說(shuō)是以空格隔開(kāi)的變量(因?yàn)槟J(rèn)都是字符串類(lèi)型)忠怖,
# in后有幾個(gè)變量,這個(gè)for循環(huán)就循環(huán)幾次抄瑟。
# 第一次循環(huán)凡泣,把第一個(gè)變量賦值給in前邊的變量i,然后進(jìn)入循環(huán)操作。
# 這只是for循環(huán)的一種形式鞋拟,知道流程即可骂维,后邊會(huì)在詳細(xì)說(shuō)明Bash中的for循環(huán)。
# do和done就類(lèi)似于Java中for循環(huán)的大括號(hào)(先這樣理解就可以)贺纲。


# 寫(xiě)一個(gè)for循環(huán)腳本
[root@Lyl tmp]# vim for.sh


# 腳本內(nèi)容如下:

#!/bin/bash
for i in 1 2 3 4 
    do
        echo $i
    done

# 執(zhí)行該腳本
[root@Lyl tmp]# chmod 755 for.sh 
[root@Lyl tmp]# ./for.sh 
1
2
3
4

示例區(qū)別:

# 定義一個(gè)腳本param.sh
[root@Lyl tmp]# vim param.sh


# 腳本內(nèi)容如下:

#!/bin/bash

# 定義for循環(huán)航闺,in后面有幾個(gè)值,for會(huì)循環(huán)多少次猴誊,
# 注意"S*"要用雙引號(hào)括起來(lái)潦刃,每次循環(huán)會(huì)把in后面的值賦予變量i,
# Shell把$*中的所有參數(shù)看成是一個(gè)整體懈叹,所以這個(gè)for循環(huán)只會(huì)循環(huán)一次乖杠。

for i in "$*" 
    do
        # 打印變量i的值
        echo "循環(huán)了"$i
    done
        
echo "==============="

# Shell把$@中的每個(gè)參數(shù)都看成是獨(dú)立的,所以“$@"中有幾個(gè)參數(shù)澄成,就會(huì)循環(huán)幾次胧洒。
# 注意兩個(gè)for循環(huán)的變量名最好不相同,以示區(qū)別环揽。相同也沒(méi)關(guān)系略荡。
for j in "$@" 
    do
        # 打印變量j的值
        echo "循環(huán)了"$j
    done
        

# 執(zhí)行該腳本 
[root@Lyl tmp]# chmod 755 param.sh 
[root@Lyl tmp]# ./param.sh 11 22 33 44
循環(huán)了11 22 33 44
===============
循環(huán)了11
循環(huán)了22
循環(huán)了33
循環(huán)了44

圖示:


3、位置參數(shù)變量$#

$#:這個(gè)變量代表命令行中所有參數(shù)的個(gè)數(shù)歉胶。

示例:

# 定義一個(gè)腳本parameter.sh

[root@Lyl tmp]# vim parameter.sh


# 腳本內(nèi)容如下:

#!/bin/bash

# 使用$#代表所有參數(shù)的個(gè)數(shù)
echo "The parameters \$# is:$#"


# 執(zhí)行該腳本
[root@Lyl tmp]# chmod 755 parameter.sh 
[root@Lyl tmp]# ./parameter.sh 11 22 33 44
The parameters $# is:4

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末汛兜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子通今,更是在濱河造成了極大的恐慌粥谬,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辫塌,死亡現(xiàn)場(chǎng)離奇詭異漏策,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)臼氨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)掺喻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人储矩,你說(shuō)我怎么就攤上這事感耙。” “怎么了持隧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵即硼,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我屡拨,道長(zhǎng)只酥,這世上最難降的妖魔是什么褥实? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮裂允,結(jié)果婚禮上损离,老公的妹妹穿的比我還像新娘。我一直安慰自己叫胖,他們只是感情好草冈,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著瓮增,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哩俭。 梳的紋絲不亂的頭發(fā)上绷跑,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音凡资,去河邊找鬼砸捏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛隙赁,可吹牛的內(nèi)容都是我干的垦藏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼伞访,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼掂骏!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起厚掷,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤弟灼,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后冒黑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體田绑,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年抡爹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掩驱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冬竟,死狀恐怖欧穴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情诱咏,我是刑警寧澤苔可,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站袋狞,受9級(jí)特大地震影響焚辅,放射性物質(zhì)發(fā)生泄漏映屋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一同蜻、第九天 我趴在偏房一處隱蔽的房頂上張望棚点。 院中可真熱鬧,春花似錦湾蔓、人聲如沸瘫析。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贬循。三九已至,卻和暖如春桃序,著一層夾襖步出監(jiān)牢的瞬間杖虾,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工媒熊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奇适,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓芦鳍,卻偏偏與公主長(zhǎng)得像嚷往,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柠衅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359