Bourne Shell 指令碼/附錄 C:快速參考
本節是本文件的快速查詢參考。它是一些簡要示例和規則的集合,如果你沒有閱讀過文字,這些示例和規則將是難以理解的。
| 命令 | 效果 |
|---|---|
| cat | 按順序列出檔案或多個檔案。 |
| cd | 更改目錄。 |
| chmod ugo+rwx | 為使用者、組和其他使用者設定讀、寫和執行許可權。 |
| chmod a-rwx | 從所有使用者刪除讀、寫和執行許可權。 |
| chmod 755 | 設定使用者寫許可權和通用讀執行許可權 |
| chmod 644 | 設定使用者寫許可權和通用讀許可權。 |
| cp | 複製檔案。 |
| expr 2 + 2 | 新增 2 + 2。 |
| fgrep | 搜尋字串匹配。 |
| grep | 搜尋字串模式匹配。 |
| grep -v | 搜尋不匹配。 |
| grep -n | 列出匹配項的行號。 |
| grep -i | 忽略大小寫。 |
| grep -l | 僅列出匹配項的檔名。 |
| head -n5 source.txt | 列出前 5 行。 |
| less | 一次檢視一屏文字檔案;可以雙向滾動。 |
| ll | 提供帶檔案詳細資訊的檔案列表。 |
| ls | 提供簡單的檔案列表。 |
| mkdir | 建立一個目錄。 |
| more | 一次顯示一屏檔案。 |
| mv | 移動或重新命名檔案。 |
| paste f1 f2 | 按列貼上檔案。 |
| pg | "more" 的變體。 |
| pwd | 列印工作目錄。 |
| rm | 刪除檔案。 |
| rm -r | 刪除整個目錄子樹。 |
| rmdir | 刪除空目錄。 |
| sed 's/txt/TXT/g' | 掃描和替換文字。 |
| sed 's/txt/d' | 掃描和刪除文字。 |
| sed '/txt/q' | 掃描並退出。 |
| sort | 對輸入進行排序。 |
| sort +1 | 跳過排序中的第一個欄位。 |
| sort -n | 對數字進行排序。 |
| sort -r | 反序排序。 |
| sort -u | 消除輸出中的冗餘行。 |
| tail -5 source.txt | 列出最後 5 行。 |
| tail +5 source.txt | 列出第 5 行之後的全部行。 |
| tr '[A-Z]' '[a-z]' | 轉換為小寫。 |
| tr '[a-z]' '[A-Z]' | 轉換為大寫。 |
| tr -d '_' | 刪除下劃線。 |
| uniq | 查詢唯一行。 |
| wc | 字數統計(字元、單詞、行)。 |
| wc -w | 僅字數統計。 |
| wc -l | 行數統計。 |
| 命令 | 效果 |
|---|---|
| shvar="Test 1" | 初始化 Shell 變數。 |
| echo $shvar | 顯示 Shell 變數。 |
| export shvar | 允許子 Shell 使用 Shell 變數。 |
| mv $f ${f}2 或 mv ${f}{,2} | 在 Shell 變數中的檔名末尾追加 "2"。 |
| $1, $2, $3, ... | 命令列引數。 |
| $0 | Shell 程式名稱。 |
| $# | 引數數量。 |
| $* | 完整引數列表(全部在一個字串中)。 |
| $@ | 完整引數列表(每個引數的字串)。 |
| $? | 最後執行的命令的退出狀態。 |
| shift 2 | 將引數變數向後移動 2 位。 |
| read v | 將輸入讀入變數 "v" 中。 |
| . mycmds | 執行檔案中的命令。 |
如果語句執行 if 和 then 之間的命令。如果該命令返回非 0,則執行 then 和 else 之間的命令 - 否則執行 else 和 fi 之間的命令。
if test "${1}" = "red" ; then
echo "Illegal code."
elif test "${1}" = "blue" ; then
echo "Illegal code."
else
echo "Access granted."
fi
if [ "$1" = "red" ]
then
echo "Illegal code."
elif [ "$1" = "blue" ]
then
echo "Illegal code."
else
echo "Access granted."
fi
大多數測試命令可以使用多種語法編寫。熟練掌握並始終如一地使用一種形式可能是最佳程式設計實踐,並且可能是更高效的時間利用方式。
字串測試由 test 命令執行。有關更多詳細資訊,請參見 help test。為了使指令碼看起來更像其他程式語言,定義了同義詞 [ ... ],它與 test 的功能完全相同。
| 命令 | 效果 |
|---|---|
| test "$shvar" = "red" [ "$shvar" = "red" ] |
字串比較,如果匹配則為真。 |
| test "$shvar" != "red" [ "$shvar" != "red" ] |
字串比較,如果不匹配則為真。 |
| test -z "${shvar}" test "$shvar" = "" |
如果變數為空則為真。 |
| test -n "${shvar}" test "$shvar" != "" |
如果變數不為空則為真。 |
可以使用 test 執行簡單的算術運算,對於更復雜的算術運算,存在 let 命令。有關更多詳細資訊,請參見 help let。請注意,對於 let 命令,變數不需要以 '$' 為字首,並且語句需要是一個引數,在引數內部有空格時使用 '...'。與 test 一樣,定義了一個同義詞 - (( ... )) - 使 Shell 指令碼看起來更像普通程式。
| 命令 | 效果 |
|---|---|
| test "$nval" -eq 0 let 'nval == 0' |
整數測試;如果等於 0 則為真。 |
| test "$nval" -ge 0 let 'nval >= 0' |
整數測試;如果大於或等於 0 則為真。 |
| test "$nval" -gt 0 let 'nval > 0' |
整數測試;如果大於 0 則為真。 |
| test "$nval" -le 0 let 'nval <= 0' |
整數測試;如果小於或等於 0 則為真。 |
| test "$nval" -lt 0 let 'nval < 0' |
整數測試;如果小於 0 則為真。 |
| test "$nval" -ne 0 let 'nval != 0' |
整數測試;如果與 0 不相等則為真。 |
| let 'y + y > 100' (( y + y >= 100)) |
整數測試;如果 則為真 |
| 命令 | 效果 |
|---|---|
| test -d tmp [ -d tmp ] |
如果 "tmp" 是目錄,則為真。 |
| test -f tmp [ -f tmp ] |
如果 "tmp" 是普通檔案,則為真。 |
| test -r tmp [ -r tmp ] |
如果 "tmp" 可讀,則為真。 |
| test -s tmp [ -s tmp ] |
如果 "tmp" 的長度不為零,則為真。 |
| test -w tmp [ -w tmp ] |
如果 "tmp" 可寫,則為真。 |
| test -x tmp [ -x tmp ] |
如果 "tmp" 可執行,則為真。 |
布林運算由一組運算子執行。需要注意的是,運算子執行程式並比較結果程式碼。由於布林運算子通常與test命令結合使用,因此建立了一種統一的形式[[ ... ]]。
| 命令 | 效果 |
|---|---|
| test -d /tmp && test -r /tmp [[ -d /tmp && -r /tmp ]] |
如果“/tmp”是目錄並且可讀,則為真。 |
| test -r /tmp || test -w /tmp [[ -r /tmp || -w /tmp ]] |
如果“tmp”可讀或可寫,則為真。 |
| test ! -x /tmp [[ ! -x /tmp ]] |
如果檔案不可執行,則為真 |
case "$1"
in
"red") echo "Illegal code."
exit;;
"blue") echo "Illegal code."
exit;;
"x"|"y") echo "Illegal code."
exit;;
*) echo "Access granted.";;
esac
for nvar in 1 2 3 4 5
do
echo $nvar
done
for file # Cycle through command-line arguments.
do
echo $file
done
while [ "$n" != "Joe" ] # Or: until [ "$n" == "Joe" ]
do
echo "What's your name?"
read n
echo $n
done
有“break”和“continue”命令,允許您在需要時退出或跳過迴圈的末尾。
我們可以使用 test 代替 []。[] 要求在括號前後有空格,並且引數之間也應有空格。
此內容最初來自http://www.vectorsite.net/tsshell.html,最初為公共領域。