Shell指令碼中的 測試開關 和 特殊參數,shell指令碼
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} 來訪問 |
shell指令碼怎從命令列輸入參數取代指令檔中的值
樓主,你好!
你可以使用read命令,讀入鍵入的值
然後使用$符號引用就而已了
例如:
echo -n "請輸入一個字元:"
read Char
echo $Char
如果需要變數覆蓋,直接將變數=$Char
希望可以協助到你!
shell指令碼中的$#表示什意思?
shell指令碼執行過程中 把第一個字串作為指令碼名稱(或程式名稱)處理,第二、第三。。。都作為參數處理。shell會將這些參數預設的賦給變數 1 2 3 。。。所以當你echo $1 $2的時候看到的就是參數變數的值。
解答一下$#的問題:這裡$#是計算輸入參數的個數
還有一些有用的演算法:$@ 代表所有輸入的參數;$* 同上