首頁 > 軟體

Shell 特殊變數淺識

2020-06-16 17:12:07

位置變數

$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


IT145.com E-mail:sddin#qq.com