1. 測試開關
Shell中自帶的一些測試指令, 下表列出這些測試指令的含義以及是否可用於 test命令, bash, ksh.
開關 |
test |
bash |
ksh |
定義 |
-a FILE | 支持 | 支持 | 只是文件存在 | |
-b FILE | 支持 | 支持 | 支持 | 文件存在, 並且是一個類似於 /dev 下的磁盤設備之類的塊文件 |
-c FILE | 支持 | 支持 | 支持 | 文件存在, 並且是一個類似於 /dev 下的TTY設備之類的字符文件 |
-d FILE | 支持 | 支持 | 支持 | 文件存在, 並且是一個標准目錄 |
-e FILE | 支持 | 支持 | 支持 | 只是文件存在 |
-f FILE | 支持 | 支持 | 支持 | 文件存在, 並且是一個類似於平面文件的標准文件 |
-g FILE | 支持 | 支持 | 支持 | 文件存在, 並且是一個set-group-ID. 這是指對文件可執行性的用戶有效組進行改變的文件許可 |
-G FILE | 支持 | 支持 | 支持 | 文件存在, 並且它的組所有權是用戶的有效組ID |
-h FILE | 支持 | 支持 | 支持 | 文件存在, 並且它是一個符號鏈接. 和 -L 一樣 |
-k FILE | 支持 | 支持 | 支持 | 文件存在, 並且它粘着位設置. 這意味着只有文件的所有者或者目錄的所有者可以刪除文件 |
-l STRING | 支持 | 和類似於 /usr/bin/test -l string -gt 5 && echo 的數字值, 比較 STRING 長度 | ||
-L FILE | 支持 | 支持 | 支持 | 文件存在, 並且它是一個符號鏈接. 和 -h 一樣 |
-n STRING | 支持 | 支持 | 支持 | STRING 的長度非零 |
-N FILE | 支持 | 支持 | 文件存在, 但是自從最近一次讀入之后, 已經被修改 | |
-o OPTION | 支持 | 支持 | 支持 | 如果 shell 的 OPTION 被打開, 返回真, 例如 set -x |
-O FILE | 支持 | 支持 | 支持 | 文件存在, 並且它的所有者由有效的用戶ID決定 |
-p FILE | 支持 | 支持 | 支持 | 文件存在, 並且它是一個命名管道 (or FIFO) |
-r FILE | 支持 | 支持 | 支持 | 文件存在, 並且可讀 |
-s FILE | 支持 | 支持 | 支持 | 文件存在, 並且它的大小大於 0 字節 |
-S FILE | 支持 | 支持 | 支持 | 文件存在, 並且它是一個 socket |
-t [FD] | 支持 | 支持 | 支持 | 在一個終端打開 FD(文件描述符), 默認是 stdout |
-u FILE | 支持 | 支持 | 支持 | 文件存在, 並且 set-user-ID 被設置 |
-w FILE | 支持 | 支持 | 支持 | 文件存在, 並且可寫 |
-x FILE | 支持 | 支持 | 支持 | 文件存在, 並且可執行 |
-z STRING | 支持 | 支持 | 支持 | STRING 的長度為 0 |
2. 特殊參數
shell中的特殊參數是shell的內部變量, 要用 前綴$ 來使用.
比如 echo $? 就是獲取 shell內部變量 "?" 的值.
內容變量一覽:
參數 |
定義 |
* | 從 1 開始, 完成所有位置變量列表. 如果被雙引號引上, 成為有 IFS (內部文件分隔符)值的第一個字符分割的單詞 |
@ | 從 1 開始, 完成所有位置變量列表. 如果被雙引號引上, 將每一個位置參數變成單個詞 |
# | 以十進制表示的位置參數數目 |
? | 最后或者最近一個前台任務的返回碼. 如果任務被一個信號殺掉, 返回值為 128 加上信號的值. 例如: 標准kill信號值是 15, 那么返回值就是 143 |
- | 所有發送給 shell 的標志, 或者 set 命令提供的標志 |
$ | shell 進程ID. 如果在子shell中, 它被擴展為當前shell的值, 而不是子shell的值 |
! | 最近被放到后台執行的命令的進程ID |
_ | 擴展為前一個命令的最后一個參數 |
0 | 擴展為shell或者shell腳本的名字 |
1…9 | 提供給shell, 函數或者腳本的位置參數. 比 9 大的值可以用 ${number} 來訪問 |