跳轉到內容

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 行數統計。

基本 Shell 功能

[編輯 | 編輯原始碼]
命令 效果
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 語句

[編輯 | 編輯原始碼]

如果語句執行 ifthen 之間的命令。如果該命令返回非 0,則執行 thenelse 之間的命令 - 否則執行 elsefi 之間的命令。

   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" = ""
[ "$shvar" = "" ]

如果變數為空則為真。
test -n "${shvar}"

test "$shvar" != ""
[ -n "$shvar" ]
[ "$shvar" != "" ]

如果變數不為空則為真。

算術測試

[編輯 | 編輯原始碼]

可以使用 test 執行簡單的算術運算,對於更復雜的算術運算,存在 let 命令。有關更多詳細資訊,請參見 help let。請注意,對於 let 命令,變數不需要以 '$' 為字首,並且語句需要是一個引數,在引數內部有空格時使用 '...'。與 test 一樣,定義了一個同義詞 - (( ... )) - 使 Shell 指令碼看起來更像普通程式。

命令 效果
test "$nval" -eq 0

let 'nval == 0'
[ "$nval" -eq 0 ]
(( nval == 0 ))

整數測試;如果等於 0 則為真。
test "$nval" -ge 0

let 'nval >= 0'
[ "$nval" -ge 0 ]
(( nval >= 0 ))

整數測試;如果大於或等於 0 則為真。
test "$nval" -gt 0

let 'nval > 0'
[ "$nval" -gt 0 ]
(( nval > 0 ))

整數測試;如果大於 0 則為真。
test "$nval" -le 0

let 'nval <= 0'
[ "$nval" -le 0 ]
(( nval <= 0 ))

整數測試;如果小於或等於 0 則為真。
test "$nval" -lt 0

let 'nval < 0'
[ "$nval" -lt 0 ]
(( nval < 0 ))

整數測試;如果小於 0 則為真。
test "$nval" -ne 0

let 'nval != 0'
[ "$nval" -ne 0 ]
(( 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 語句

[編輯 | 編輯原始碼]
   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,最初為公共領域。


下一頁: 附錄 D:食譜 | 上一頁: 附錄 B:環境引用
主頁: Bourne Shell 指令碼
華夏公益教科書