shell 特殊變數

2021-09-20 20:10:49 字數 1661 閱讀 8781

位置變數。

$0 獲取當前執行的shell指令碼的檔名。如圖:

[root@localhost ~]# vim 0.sh 

[root@localhost ~]# cat 0.sh 

echo $0

[root@localhost ~]# sh 0.sh

0.sh

[root@localhost ~]#

如果我把它的完全路徑輸入的話就會這樣,如圖:

[root@localhost ~]# sh /root/0.sh 

/root/0.sh

$1一直到$10是代表對應的第幾個變數,如$1是對應的第乙個變數的值,如果是$10的話,要把10用{}括號括號起來,如$

如圖:[root@localhost ~]# sh 0.sh zhouyu

zhouyu

順便說一下,seq是傳送從哪個值到哪個值,如命令

seq -s " " 1 10

是說傳送1到10用空格分隔出來,如圖:

[root@localhost ~]# seq -s " $" 1 10

1 $2 $3 $4 $5 $6 $7 $8 $9 $10

$#是指命令列引數的總個數。如果給你命令列的引數有10個那麼$#就是10

dirname $0是把指令碼的目錄取出來

basename $0是把名稱取出來。

如圖:[root@localhost ~]# cat 0.sh 

dirname $0

basename $0

[root@localhost ~]# sh /root/0.sh 

/root

0.sh

[root@localhost ~]#

可以去看看/etc/init.d/nfs檔案對於這些引數的用法。

$@和$*的區別

$*是把所有的變數看成是乙個變數,在加了""的情況下就是這樣。如果不加""的話就會把每一      個變數都拆分出來,這樣和$@是沒有區別的 

$@是把所有的變數都拆分出來,在加了""的情況下就是這樣的。兩者的區別可以看看下面的例      子

[root@localhost zhouyu]# set "zhou yu" 1 3

[root@localhost zhouyu]# for i;do echo $i;done

zhou yu 1

3[root@localhost zhouyu]# for i in $*;do echo $i;done

zhou

yu 1

3[root@localhost zhouyu]# for i in $@;do echo $i;done

zhou

yu 1

3[root@localhost zhouyu]# for i in "$*";do echo $i;done

zhou yu 1 3

[root@localhost zhouyu]# for i in "$@";do echo $i;done

zhou yu 1

3有時候我們要刪除目錄的時候,就是用變數刪除的,可是如果沒有變數或者我們定義的變數突然失效的話,那有可能會從/開始刪除,這樣的話就會對系統造成影響。所以我們可以用以下命令來確保我們的變數存在

$上面那個的意思就是說如果$zhouyu變數不存在,就會賦予它乙個值,這個值為/tmp

shell 特殊變數

變數解釋 展開為 1c 2c 3c 4c 5c.其中字母c為變數 ifs 的第乙個字母,ifs預設為空.展開為 1 2 3 4 5 引數個數 上乙個命令的返回值 當前指令碼的程序id pid 上乙個後台執行程序的程序號.上乙個命令的最後乙個引數.下面的aaa bbb 為變數名 如果 aaa為空或未定...

Shell特殊變數

變數名只能包含數字 字母和下劃線,因為某些包含其他字元的變數有特殊含義,這樣的變數被稱為特殊變數。例如,表示當前shell程序的id,即pid,看下面的 echo 執行結果29949 特殊變數列表 變數含義 0 當前指令碼的檔名 n傳遞給指令碼或函式的引數。n 是乙個數字,表示第幾個引數。例如,第乙...

shell 特殊變數

前面已經講到,變數名只能包含數字 字母和下劃線,因為某些包含其他字元的變數有特殊含義,這樣的變數被稱為特殊變數。例如,表示當前shell程序的id,即pid,看下面的 echo 執行結果29949 特殊變數列表 變數 含義 0 當前指令碼的檔名 n傳遞給指令碼或函式的引數。n 是乙個數字,表示第幾個...