
- Unix/Linux 初學者指南
- Unix/Linux - 首頁
- Unix/Linux - 什麼是Linux?
- Unix/Linux - 入門
- Unix/Linux - 檔案管理
- Unix/Linux - 目錄
- Unix/Linux - 檔案許可權
- Unix/Linux - 環境
- Unix/Linux - 基本實用程式
- Unix/Linux - 管道與過濾器
- Unix/Linux - 程序
- Unix/Linux - 通訊
- Unix/Linux - vi 編輯器
- Unix/Linux Shell 程式設計
- Unix/Linux - Shell 指令碼
- Unix/Linux - 什麼是Shell?
- Unix/Linux - 使用變數
- Unix/Linux - 特殊變數
- Unix/Linux - 使用陣列
- Unix/Linux - 基本運算子
- Unix/Linux - 決策
- Unix/Linux - Shell 迴圈
- Unix/Linux - 迴圈控制
- Unix/Linux - Shell 替換
- Unix/Linux - 引號機制
- Unix/Linux - I/O 重定向
- Unix/Linux - Shell 函式
- Unix/Linux - 手冊頁幫助
- 高階 Unix/Linux
- Unix/Linux - 標準 I/O 流
- Unix/Linux - 檔案連結
- Unix/Linux - 正則表示式
- Unix/Linux - 檔案系統基礎
- Unix/Linux - 使用者管理
- Unix/Linux - 系統性能
- Unix/Linux - 系統日誌
- Unix/Linux - 訊號和陷阱
Unix/Linux - 特殊變數
本章將詳細討論 Unix 中的特殊變數。在我們之前的章節中,我們瞭解到在使用變數名中的某些非字母數字字元時需要小心。這是因為這些字元用於特殊 Unix 變數的名稱。這些變數保留用於特定函式。
例如,$ 字元表示當前 shell 的程序 ID 號或 PID:
$echo $$
上述命令寫入當前 shell 的 PID:
29949
下表顯示了您可以在 shell 指令碼中使用的許多特殊變數:
序號 | 變數及描述 |
---|---|
1 |
$0 當前指令碼的檔名。 |
2 |
$n 這些變數對應於呼叫指令碼的引數。這裡 n 是一個正十進位制數,對應於引數的位置(第一個引數是 $1,第二個引數是 $2,依此類推)。 |
3 |
$# 提供給指令碼的引數數量。 |
4 |
$* 所有引數都用雙引號括起來。如果指令碼接收兩個引數,$* 等效於 $1 $2。 |
5 |
$@ 所有引數都分別用雙引號括起來。如果指令碼接收兩個引數,$@ 等效於 $1 $2。 |
6 |
$? 最後執行命令的退出狀態。 |
7 |
$$ 當前 shell 的程序號。對於 shell 指令碼,這是它們正在執行的程序 ID。 |
8 |
$! 最後一個後臺命令的程序號。 |
命令列引數
命令列引數 $1、$2、$3……$9 是位置引數,$0 指向實際的命令、程式、shell 指令碼或函式,$1、$2、$3……$9 作為命令的引數。
下面的指令碼使用了與命令列相關的各種特殊變數:
#!/bin/sh echo "File Name: $0" echo "First Parameter : $1" echo "Second Parameter : $2" echo "Quoted Values: $@" echo "Quoted Values: $*" echo "Total Number of Parameters : $#"
以下是上述指令碼的示例執行:
$./test.sh Zara Ali File Name : ./test.sh First Parameter : Zara Second Parameter : Ali Quoted Values: Zara Ali Quoted Values: Zara Ali Total Number of Parameters : 2
特殊引數 $* 和 $@
有一些特殊引數允許一次訪問所有命令列引數。$* 和 $@ 在不加雙引號 "" 的情況下行為相同。
這兩個引數都指定命令列引數。但是,"$*" 特殊引數將整個列表作為帶空格的一個引數,而 "$@" 特殊引數將整個列表分開,分成單獨的引數。
我們可以編寫如下所示的 shell 指令碼,使用 $* 或 $@ 特殊引數處理未知數量的命令列引數:
#!/bin/sh for TOKEN in $* do echo $TOKEN done
以下是上述指令碼的示例執行:
$./test.sh Zara Ali 10 Years Old Zara Ali 10 Years Old
注意 - 這裡的 do...done 是一種迴圈,將在後續教程中介紹。
退出狀態
$? 變量表示前一個命令的退出狀態。
退出狀態是由每個命令在其完成時返回的數值。通常,如果命令成功,則返回退出狀態 0,如果命令不成功,則返回 1。
某些命令會因特定原因返回其他退出狀態。例如,某些命令區分錯誤型別,並根據特定型別的故障返回不同的退出值。
以下是成功命令的示例:
$./test.sh Zara Ali File Name : ./test.sh First Parameter : Zara Second Parameter : Ali Quoted Values: Zara Ali Quoted Values: Zara Ali Total Number of Parameters : 2 $echo $? 0 $