2021-05-12 14:32:11
Shell 特殊變數淺識
位置變數
$0 獲取當前執行的shell指令碼的檔名,如果執行指令碼帶路徑那麼就包括指令碼路徑
[root@linuxidc shell]# sh n.sh
n.sh
[root@linuxidc ~]# sh /shell/n.sh
/shell/n.sh
[root@linuxidc shell]# sh `pwd`/n.sh
/shell/n.sh
$n 獲取當前執行的shell指令碼的第n個引數值,n=1..9,當n為0時表示指令碼的檔名,如果n大於0,大括號括起來${10}
指令碼內容:
#!/bin/bash
echo $1
[root@linuxidc shell]# sh p.sh linuxidc #1個引數
linuxidc
[root@linuxidc shell]# sh p.sh linuxidc cainiao #2個引數輸出的是第一個引數
linuxidc
$* 獲取當前shell的所有引數,將所有的命令列引數視為單個字串,相當於"$1$2$3".....注意與$#的區域
$# 獲取當前執行的shell指令碼後面接的引數的總個數
[root@linuxidc shell]# cat p.sh
echo $1
echo $#
[root@linuxidc shell]# sh p.sh {a..z}
a
26
企業應用:(控制使用者引數輸入的個數)當輸入引數不等於2成立輸出“muse two”,側不成立會輸出"buchengli"
[root@linuxidc shell]# cat 1p.sh
#!/bin/bash
[ $# -ne 2 ] && {
echo "muse two"
exit 1 #值1是退出後$? 的值
}
echo "buchengli"
[root@linuxidc shell]# sh 1p.sh bai
muse two
[root@linuxidc shell]# sh 1p.sh bai shu
buchengli
[root@linuxidc shell]#
$@ 這個程式的所有引數"$1" "$2" "$3" "...",這是將引數傳遞給其他程式的最佳方式,因為他會保留內嵌在每個引數裡的任何空白。
$*和$@的區別例子
$* 將所有的命令列所有引數視為單個字串,等同於"$1$2$3","$*"
$@ 將命令列每個引數視為單獨的字串,等同於"$1" "$2" "$3".這是將引數傳遞給其他程式的最近方式,因為他會保留所有內嵌在每個引數裡的任何空白。
注意:上述區別僅在於加雙引號的時候,即"$*"與"$@"
shift 移動位置變數
2.進程狀態變數
$$ 獲取當前shell的進程號
$! 執行上一個指令的PID
$? 獲取執行上一個指令的返回值(0為成功,非零為失敗)#這個變數很常用
$_ 在此之前執行的命令或指令碼的最後一個引數
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-06/145001.htm
相關文章