這篇文章給大家分享的是有關(guān)Shell編程中特殊變量的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

$0 $# $n-->$[1..9] $* $@
1、在shell中存在著一些特殊而又重要的變?nèi)纾?1 $0 $#,我們稱為特殊的位置變量要從命令行,函數(shù),腳本,等傳遞參數(shù)時(shí),就需要在shell腳本中使用位置參數(shù)變量
$0:顯示當(dāng)前的腳本文件名,如果在執(zhí)行腳本時(shí)添加了路徑,那么全部都會(huì)輸出
$n:獲取當(dāng)前執(zhí)行的shell腳本的第n個(gè)參數(shù)值比如:[n=1..9],如果N大于9那么就要使用{}來(lái)定義 比如${10}
$#:獲取當(dāng)前shell腳本后面接的參數(shù)的個(gè)數(shù)
$*:獲取當(dāng)前腳本的參數(shù),不加引號(hào)和$@是一樣的 加了引號(hào);例如"$*" 則表示單個(gè)字符串。相當(dāng)于"$1 $2 $3"
$@:同樣也是獲取當(dāng)前shell的參數(shù),不加引號(hào)和$*是一樣的,那么加了引號(hào)如:"$@" 表示將所有的參數(shù)視為不同獨(dú)立的字符串,相當(dāng)于"$1" "$2"..
總結(jié):$*和$@不加雙引號(hào) 是沒(méi)有任何區(qū)別的,有雙引號(hào)兩者就有區(qū)別
1)$1 $2 特殊變量實(shí)戰(zhàn)
[root@yankerp src]# cat test.sh #查看腳本的內(nèi)容 #!/bin/bash echo $1 ---<定義了$1 [root@yankerp src]# source test.sh yankai #執(zhí)行的腳本的時(shí)候?qū)ankai賦值給腳本中的1 yankai #輸出yankai [root@yankerp src]#
例2:
[root@yankerp src]# cat test.sh #腳本內(nèi)容 #!/bin/bash echo $1 [root@yankerp src]# source test.sh zhangsan lisi #zhansgan lisi是兩個(gè)字符串以空格分割 zhangsan #只輸出了zhangsan,因?yàn)槟_本中只定義了$1 [root@yankerp src]#
例3:
[root@yankerp src]# cat test.sh #查看腳本的內(nèi)容 #!/bin/bash echo $1 [root@yankerp src]# source test.sh "zhangsan lisi" #加雙引號(hào)表示一個(gè)字符串參數(shù) zhangsan lisi #最后輸出結(jié)果為zhangsan lisi [root@yankerp src]#
例4:在腳本中添加$1 $2測(cè)試:
[root@yankerp src]# cat test.sh #查看腳本的內(nèi)容 #!/bin/bash echo $1 $2 定義了$1 $2 [root@yankerp src]# source test.sh zhangsan lisi #在執(zhí)行腳本的時(shí)候定義了兩個(gè)字符串 zhangsan lisi #說(shuō)明 zhangsan賦值給了$1 lisi賦值給了$2 輸出結(jié)果為 zhangsan lisi [root@yankerp src]#
同時(shí)也可以這樣加雙引號(hào) 如下:
[root@yankerp src]# cat test.sh #查看腳本的內(nèi)容 #!/bin/bash echo $1 $2 [root@yankerp src]# source test.sh "zhangsan lisi" yankai #""表示一個(gè)字符串 zhangsan lisi yankai #輸出結(jié)果 [root@yankerp src]#
2)當(dāng)我們一個(gè)個(gè)的輸入echo $1---15時(shí)會(huì)感覺(jué)很慢我們可以使用以下命令來(lái)接收命令傳遞的15個(gè)參數(shù)
[root@yankerp src]# echo \${1..15}
$1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15將輸出的內(nèi)容導(dǎo)入到test.sh文件中
[root@yankerp src]# echo \${1..15} > test.sh
[root@yankerp src]# cat test.sh
$1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15
[root@yankerp src]#我們?cè)谀_本第一行加入echo
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15
3)打印26個(gè)字母如下:
[root@yankerp src]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z傳入26個(gè)字母a-z 作為26個(gè)參數(shù)
[root@yankerp src]# cat test.sh
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 #腳本內(nèi)容
[root@yankerp src]# source test.sh {a..z} #傳入26個(gè)字母
a b c d e f g h i a0 a1 a2 a3 a4 a5 #位置參數(shù)大于9后,輸出的內(nèi)容就不對(duì)了
[root@yankerp src]#當(dāng)位置參數(shù)大于9時(shí) 上面已經(jīng)提到了我們可以使用{}來(lái)定義如下:
[root@yankerp src]# cat test.sh
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15}再次·執(zhí)行
[root@yankerp src]# source test.sh {a..z}
a b c d e f g h i j k l m n o4)$0特殊變量實(shí)戰(zhàn)
[root@yankerp src]# cat y.sh #!/bin/bash echo $0
當(dāng)我們不帶路徑運(yùn)行腳本,它會(huì)打印腳本的名稱,如下:
[root@yankerp src]# sh y.sh y.sh
當(dāng)我們帶絕對(duì)路徑來(lái)執(zhí)行腳本時(shí),它會(huì)輸出路徑+腳本名
[root@yankerp src]# sh /usr/local/src/y.sh /usr/local/src/y.sh
介紹dirname ---- basename
[root@yankerp src]# dirname /usr/local/src/y.sh /usr/local/src [root@yankerp src]# basename /usr/local/src/y.sh y.sh
·dirname功能:獲取腳本的路徑
·basename:獲取腳本的名稱
例如:
[root@yankerp src]# cat y.sh #!/bin/bash dirname $0 basename $0 [root@yankerp src]# sh /usr/local/src/y.sh /usr/local/src y.sh [root@yankerp src]#
5)$#特殊變量獲取傳參個(gè)數(shù)實(shí)踐
[root@yankerp src]# cat test.sh
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 < 9個(gè)位置參數(shù)變量
echo $# <----加入$#
[root@yankerp src]# source test.sh {a..z} <傳入26個(gè)字符
a b c d e f g h i -----<只接收9個(gè)變量
26 ----<傳入26個(gè)字符。因此這里顯示26
[root@yankerp src]#實(shí)例1:條件表達(dá)式判斷語(yǔ)句如下:
#!/bin/bash
[ $# -ne "2" ] && { #如果用戶輸入的傳參個(gè)數(shù)不等于2
echo "請(qǐng)輸出正確的數(shù)值" #那么輸出此信息
exit 1 #隨后退出腳本
}
echo "輸入正確" #如果輸入的傳參個(gè)數(shù)是2 那么就輸出此信息運(yùn)行腳本如下:
[root@yankerp src]# sh p.sh 請(qǐng)輸出正確的數(shù)值 [root@yankerp src]# sh p.sh zhangsan lisi 輸入正確 [root@yankerp src]#
IF語(yǔ)句判斷如下:
#!/bin/bash if [ $# -ne "2" ] -------如果輸入的傳參個(gè)數(shù)不是2 then ------那么 echo "/usr/local/src/ $0 請(qǐng)輸入正確的值" --輸出一個(gè)/usr/local---路徑加$0 $0表示輸出運(yùn)行腳本的名稱 else echo "輸入正確" fi
執(zhí)行如下:
[root@yankerp src]# sh p.sh /usr/local/src/ p.sh 請(qǐng)輸入正確的值 [root@yankerp src]# sh p.sh zhangsan lisi 輸入正確 [root@yankerp src]#

$* $@后續(xù)再出!!!
二、shell進(jìn)程中特殊狀態(tài)變量
$? $$(不常用) $!(不常用) $_(不常用)$$ 和 $!都是獲取腳本進(jìn)程號(hào)PID,但是有所不同這里不在演示
1、$?特殊變量實(shí)踐
[root@yankerp ~]# pwd /root [root@yankerp ~]# echo $? 0 [root@yankerp ~]
當(dāng)我們執(zhí)行每一條命令結(jié)束后,echo $? 如果它輸出0那么就代表成功
[root@yankerp ~]# sfkljlfsdfsdf bash: sfkljlfsdfsdf: 未找到命令... [root@yankerp ~]# echo $? 127 [root@yankerp ~]#
非0則代表失敗。
案例:安裝Apache判斷是否安裝成功
[root@yankerp ~]#yum install httpd -y

案例2:通過(guò)腳本控制命令及腳本執(zhí)行返回值
#!/bin/bash if [ "$#" -ne "3" ] then echo "/bin/bash $0" 請(qǐng)輸出正確字符 exit 120 ---<如果以上不成立 并指定120值退出腳本 else echo "輸入正確" fi
運(yùn)行如下:
[root@yankerp ~]# sh k.sh /bin/bash k.sh 請(qǐng)輸出正確字符 [root@yankerp ~]# echo $? 120 [root@yankerp ~]# [root@yankerp ~]# sh k.sh zhangsan lisi wangwu 輸入正確 [root@yankerp ~]# echo $? 0 [root@yankerp ~]#

感謝各位的閱讀!關(guān)于“Shell編程中特殊變量的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
新聞名稱:Shell編程中特殊變量的示例分析-創(chuàng)新互聯(lián)
分享地址:http://www.chinadenli.net/article46/djoghg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、Google、網(wǎng)站營(yíng)銷、網(wǎng)站策劃、關(guān)鍵詞優(yōu)化、App開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容