$0 這個程式的執行名字
$n 這個程式的第n個參數值,n=1..9
$* 這個程式的所有參數,此選項參數可超過9個。
$# 這個程式的參數個數
$$ 這個程式的PID(腳本運行的當前進程ID号)
$! 執行上一個背景指令的PID(後台運行的最後一個進程的進程ID号)
$? 執行上一個指令的返回值 (顯示最後命令的退出狀态。0表示沒有錯誤,其他任何值表明有錯誤)
$- 顯示shell使用的當前選項,與set命令功能相同
$@ 跟$*類似,但是可以當作數組用
舉例說明:
以下示例顯示了此簡單操作的運行情況:
$ ls -l
total 33
drwxr-xr-w 2 root root 1024 Dec 5 05:05 LST
-rw-rw-rw- 1 emmett users 27360 Feb 6 07:30 evan
-rwsrwsrwx 1 root root 152 Feb 6 07:32 hannah
drwxr-xr-x 2 emmett users 1024 Feb 6 07:31 karen
-rw------- 1 emmett users 152 Feb 6 07:29 kristin
-rw-r--r-- 1 emmett users 152 Feb 6 07:29 spencer
$
$ test -r evan
$ echo $?
0
$ test -r walter
$ echo $?
1
$
由于第一次評估為真 — 文件存在且可讀 — 返回值為真,或 0。由于第二次評估的文件不存在,該值為假,返回值不為零。将值指定為零或非零很重要,因為在失敗時不會始終返回 1(雖然這是通常返回的值),可能返回一個非零值。
正如開頭所提到的,除了使用 test 外,您還可以用方括号 [ ] 将命令括住來向 shell 發出同樣的命令 — 如下所示:
$ [ -w evan ]
$ echo $?
0
$ [ -x evan ]
$ echo $?
1
$
同樣,第一個表達式為真,第二個表達式為假 — 正如返回值所指示的那樣。您還可以使用以下命令将兩個文件彼此進行比較:
file1 -ef file2 測試以判斷兩個文件是否與同一個設備相連,是否擁有相同的 inode 編号
file1 -nt file2 測試以判斷第一個文件是否比第二個文件更新(由修改日期決定)
file1 -ot file2 測試以判斷第一個文件是否比第二個文件更舊
if [ -z "$DIRNAME" ]這裡的-z是什麼意思啊?
if [ -d /userdata ] 這個-d呢?
類似這樣的文件操作在shell編程中用處很大:我總結有一些一些經常使用
-d :判斷制定的是否為目錄
-z:判斷制定的變量是否存在值
-f:判斷制定的是否為文件
-L:判斷制定的是否為符号鍊接
-r:判斷制定的是否可讀
-s:判斷存在的對象長度是否為0
-w:判斷制定的是否可寫
-x:判斷存在的對象是否可以執行
!:測試條件的否定符号
這些文件操作很多時候給腳本編程帶來方便,尤其是用在if條件語句中
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!