国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Linux Shell > 正文

Shell編程之特殊變量的筆記小結(jié)

2020-07-27 18:49:17
字體:
供稿:網(wǎng)友

$0 $# $n-->$[1..9] $* $@

1、在shell中存在著一些特殊而又重要的變?nèi)纾?1 $0 $#,我們稱為特殊的位置變量要從命令行,函數(shù),腳本,等傳遞參數(shù)時,就需要在shell腳本中使用位置參數(shù)變量

  1. $0:顯示當(dāng)前的腳本文件名,如果在執(zhí)行腳本時添加了路徑,那么全部都會輸出
  2. $n:獲取當(dāng)前執(zhí)行的shell腳本的第n個參數(shù)值比如:[n=1..9],如果N大于9那么就要使用{}來定義 比如${10}
  3. $#:獲取當(dāng)前shell腳本后面接的參數(shù)的個數(shù)
  4. $*:獲取當(dāng)前腳本的參數(shù),不加引號和$@是一樣的 加了引號;例如"$*" 則表示單個字符串。相當(dāng)于"$1 $2 $3"
  5. $@:同樣也是獲取當(dāng)前shell的參數(shù),不加引號和$*是一樣的,那么加了引號如:"$@" 表示將所有的參數(shù)視為不同獨立的字符串,相當(dāng)于"$1" "$2"..

總結(jié):$*和$@不加雙引號 是沒有任何區(qū)別的,有雙引號兩者就有區(qū)別

1)$1 $2 特殊變量實戰(zhàn)

[root@yankerp src]# cat test.sh #查看腳本的內(nèi)容 #!/bin/bash echo $1   ---<定義了$1 [root@yankerp src]# source test.sh yankai #執(zhí)行的腳本的時候?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是兩個字符串以空格分割 zhangsan      #只輸出了zhangsan,因為腳本中只定義了$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" #加雙引號表示一個字符串參數(shù) zhangsan lisi    #最后輸出結(jié)果為zhangsan lisi [root@yankerp src]# 

例4:在腳本中添加$1 $2測試:

[root@yankerp src]# cat test.sh #查看腳本的內(nèi)容 #!/bin/bash echo $1 $2    定義了$1 $2 [root@yankerp src]# source test.sh zhangsan lisi #在執(zhí)行腳本的時候定義了兩個字符串 zhangsan lisi    #說明 zhangsan賦值給了$1 lisi賦值給了$2 輸出結(jié)果為 zhangsan lisi [root@yankerp src]# 

同時也可以這樣加雙引號 如下:

[root@yankerp src]# cat test.sh #查看腳本的內(nèi)容 #!/bin/bash echo $1 $2 [root@yankerp src]# source test.sh "zhangsan lisi" yankai #""表示一個字符串  zhangsan lisi yankai  #輸出結(jié)果 [root@yankerp src]# 

2)當(dāng)我們一個個的輸入echo $1---15時會感覺很慢我們可以使用以下命令來接收命令傳遞的15個參數(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]# 

我們在腳本第一行加入echo

echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 

3)打印26個字母如下:

[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個字母a-z 作為26個參數(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個字母 a b c d e f g h i a0 a1 a2 a3 a4 a5   #位置參數(shù)大于9后,輸出的內(nèi)容就不對了 [root@yankerp src]# 

當(dāng)位置參數(shù)大于9時 上面已經(jīng)提到了我們可以使用{}來定義如下:

[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 o 

4)$0特殊變量實戰(zhàn)

[root@yankerp src]# cat y.sh  #!/bin/bash echo $0 

當(dāng)我們不帶路徑運行腳本,它會打印腳本的名稱,如下:

[root@yankerp src]# sh y.sh  y.sh 

當(dāng)我們帶絕對路徑來執(zhí)行腳本時,它會輸出路徑+腳本名

[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)$#特殊變量獲取傳參個數(shù)實踐

[root@yankerp src]# cat test.sh  echo $1 $2 $3 $4 $5 $6 $7 $8 $9  < 9個位置參數(shù)變量 echo $#  <----加入$# [root@yankerp src]# source test.sh {a..z}  <傳入26個字符 a b c d e f g h i  -----<只接收9個變量 26 ----<傳入26個字符。因此這里顯示26 [root@yankerp src]# 

實例1:條件表達(dá)式判斷語句如下:

#!/bin/bash [ $# -ne "2" ] && {    #如果用戶輸入的傳參個數(shù)不等于2  echo "請輸出正確的數(shù)值" #那么輸出此信息  exit 1         #隨后退出腳本 } echo "輸入正確"      #如果輸入的傳參個數(shù)是2 那么就輸出此信息 

運行腳本如下:

[root@yankerp src]# sh p.sh  請輸出正確的數(shù)值 [root@yankerp src]# sh p.sh zhangsan lisi 輸入正確 [root@yankerp src]# 

IF語句判斷如下:

#!/bin/bash if [ $# -ne "2" ]   -------如果輸入的傳參個數(shù)不是2  then         ------那么    echo "/usr/local/src/ $0 請輸入正確的值"  --輸出一個/usr/local---路徑加$0 $0表示輸出運行腳本的名稱  else    echo "輸入正確" fi 

執(zhí)行如下:

[root@yankerp src]# sh p.sh  /usr/local/src/ p.sh 請輸入正確的值 [root@yankerp src]# sh p.sh zhangsan lisi 輸入正確 [root@yankerp src]# 

$* $@后續(xù)再出!!!

二、shell進(jìn)程中特殊狀態(tài)變量

$?    $$(不常用)   $!(不常用)    $_(不常用)$$ 和 $!都是獲取腳本進(jìn)程號PID,但是有所不同這里不在演示

1、$?特殊變量實踐

[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:通過腳本控制命令及腳本執(zhí)行返回值

#!/bin/bash if [ "$#" -ne "3" ]  then   echo "/bin/bash $0" 請輸出正確字符   exit 120  ---<如果以上不成立 并指定120值退出腳本  else   echo "輸入正確" fi 

運行如下:

[root@yankerp ~]# sh k.sh  /bin/bash k.sh 請輸出正確字符 [root@yankerp ~]# echo $? 120 [root@yankerp ~]#  [root@yankerp ~]# sh k.sh zhangsan lisi wangwu 輸入正確 [root@yankerp ~]# echo $? 0 [root@yankerp ~]#  

聲明:以上文章是<<跟著老男孩學(xué)Linux運維Shell編程實戰(zhàn)>>第四章看完的總結(jié);

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 根河市| 大悟县| 灌南县| 神池县| 陵水| 贡嘎县| 宁强县| 思南县| 敖汉旗| 湖口县| 长宁区| 秦安县| 渝北区| 翁源县| 阿瓦提县| 密山市| 始兴县| 威海市| 双桥区| 海伦市| 吐鲁番市| 荣昌县| 乌拉特前旗| 奈曼旗| 瑞昌市| 碌曲县| 桑植县| 西丰县| 县级市| 正蓝旗| 荣昌县| 新沂市| 开平市| 正阳县| 巴南区| 娄烦县| 鹤壁市| 从江县| 潞城市| 鱼台县| 申扎县|