Linux 系統中 shell 變量的使用
文章目錄
- (1)簡介
- (2)變量分類
- (3)變量賦值
- (4)變量命名
- (5)變量引用
- (6)變量清除
- (7)變量只讀
- (8)內部參數變量
- (9)環境變量
- (10)數組
(1)簡介
變量是 shell 中用來存儲數據的一種特殊標識符。變量可以用來保存用戶輸入的值,也可以用來保存計算結果。
(2)變量分類
shell 中的變量可以分為以下幾類:
- 用戶自定義變量:由用戶自己定義、修改、使用。
- 環境變量:由系統維護,用于存儲有關系統和用戶的信息。
- 位置參數變量:通過命令行給程序傳遞執行參數。
- 內部參數變量:是 bash 預定義的特殊變量,用戶不能修改。
(3)變量賦值
變量賦值的格式如下:
變量名=值
例如:
name="Josh"
(4)變量命名
變量名的命名規則如下:
- 變量名只能由字母、數字、下劃線組成。
- 變量名不能以數字開頭。
- 變量名不能是關鍵字和特殊字符。
(5)變量引用
變量引用的格式如下:
$變量名
例如:
echo $name
輸出:
Josh
(6)變量清除
變量清除的格式如下:
unset 變量名
例如:
unset name
(7)變量只讀
變量設置為只讀的格式如下:
readonly 變量名
例如:
readonly name
(8)內部參數變量
shell 內部參數變量是一組特殊的變量,它們由 shell 自動設置和維護,用于存儲有關 shell 和正在運行的命令的信息。
以下是一些常見的 shell 內部參數變量及其用途:
變量名 | 含義 |
---|---|
$0 | 保存當前腳本或命令的名稱。 |
$1, $2, $3, … | 保存傳遞給腳本或函數的位置參數。 |
$# | 保存傳遞給腳本或函數的位置參數的數量。 |
$@ | 保存所有傳遞給腳本或函數的位置參數的列表。 |
$* | 保存所有傳遞給腳本或函數的位置參數的列表,作為一個單獨的字符串。 |
$$ | 保存當前 shell 進程的進程 ID(PID)。 |
$? | 保存上一個命令的退出狀態(返回值)。通常,0 表示成功,非零值表示出現了錯誤。 |
$! | 保存在后臺運行的最后一個命令的 PID。 |
$_ $ | 表示在此之前執行的命令或腳本的最后一個參數 \ |
示例:
#!/bin/bash
echo "這個腳本的名字是: $0"
echo "參數一共有: $#"
echo "參數的列表是: $@"
echo "參數的列表是: $*"
echo "第一個位置參數是: $1"
echo "第二個位置參數是: $2"
echo "第三個位置參數是: $3"
執行結果:
[root@localhost shell]# sh 1.sh 1 2 3 4 5 6
這個腳本的名字是: 1.sh
參數一共有: 6
參數的列表是: 1 2 3 4 5 6
參數的列表是: 1 2 3 4 5 6
第一個位置參數是: 1
第二個位置參數是: 2
第三個位置參數是: 3
標題 | Linux 系統中 shell 變量的使用 |
---|---|
簡介 | 變量是 shell 中用來存儲數據的一種特殊標識符。變量可以用來保存用戶輸入的值,也可以用來保存計算結果。 |
分類 | 用戶自定義變量、環境變量、位置參數變量、內部參數變量 |
賦值 | 變量名=值 |
命名 | 只能由字母、數字、下劃線組成;不能以數字開頭;不能是關鍵字和特殊字符 |
引用 | $變量名 |
清除 | unset 變量名 |
只讀 | readonly 變量名 |
內部參數變量 | $0、KaTeX parse error: Expected 'EOF', got '#' at position 9: 1、2、...、#?、@、*、、?、 ! 、 !、 !、_ |
常見環境變量 | PWD、PATH、USER、LOGNAME、SHELL、HOME |
應用 | 保存用戶輸入的值、保存計算結果、傳遞參數給命令或腳本、控制命令或腳本的執行 |
退出返回狀態 | 保存在變量 ? 中 |
其他示例
[root@localhost]# echo $$ #顯示當前進程的pid
2163
[root@localhost]# echo $? #顯示上一條命令的返回值
0
[root@localhost ]# bash #調用子shell
[root@localhost]# echo $$
4539
[root@localhost]# exit 1 #指定返回值并返回父shell
exit
命令狀態返回值:
shell 命令的退出狀態(返回值)保存在變量 ?
中。
- 0 表示成功
- 1 表示通用錯誤或執行失敗
- 126 表示命令或腳本沒權限
- 127 表示命令沒找到
1、通常,0 表示成功,非零值表示出現了錯誤。例如:
[root@localhost ~]# echo "Hello, world!"
Hello, world!
[root@localhost ~]# echo $?
0
2、命令執行失敗,返回1
[root@localhost shell]# chmod +x 2.sh
chmod: 無法訪問"2.sh": 沒有那個文件或目錄
[root@localhost shell]# echo $?
1
3、權限不夠,返回126
[root@localhost shell]# ./1.sh
-bash: ./1.sh: 權限不夠
[root@localhost shell]# echo $?
126
4、執行不存在的命令,提示返回127
[root@localhost shell]# eoch $USER
-bash: eoch: 未找到命令
[root@localhost shell]# echo $?
127
以上返回值,常用于判斷命令是否執行成功,例如:
創建文件的腳本中,如果$?的返回值,ne代表不等于0,不等于0那么就是執行失敗。
#!/bin/bash
read -p "輸入需要創建的文件名:" file
touch $file
if [ $? -ne 0 ];then echo "文件創建錯誤"
elseecho "成功創建 $file 文件"
fi
結論:退出返回狀態可以用于判斷命令的執行結果。
(9)環境變量
環境變量是保存在系統內存中的數據,可以被所有程序訪問。環境變量可以用于存儲各種信息,例如當前工作目錄、可執行程序的搜索路徑、用戶的名稱等。
常見環境變量
變量名 | 含義 |
---|---|
PWD | 保存當前工作目錄。 |
PATH | 保存可執行程序的搜索路徑。 |
USER | 保存當前用戶的名稱。 |
LOGNAME | 保存當前用戶的登錄名。 |
SHELL | 保存當前 shell 的類型。 |
HOME | 保存當前用戶的主目錄。 |
使用
環境變量可以通過 echo
命令來查看:
Bash
echo $PWD
輸出:
/home/user
環境變量也可以在命令行中使用,例如:
Bash
cd $HOME
這條命令將切換到當前用戶的主目錄。
補充
除了上述常見環境變量之外,還有一些其他的環境變量,例如:
變量名 | 含義 |
---|---|
HISTSIZE | 保存歷史命令的數量。 |
HISTFILESIZE | 保存歷史命令的文件大小。 |
LANG | 保存系統語言環境。 |
LC_ALL | 保存系統的區域設置。 |
TERM | 保存終端類型。 |
EDITOR | 保存默認編輯器。 |
這些環境變量可以用于控制 shell 的行為或提供給程序使用。
(10)數組
shell 中的數組是一種特殊的變量,可以保存多個值。數組的元素可以是任何數據類型,包括字符串、數字、布爾值等。
數組的定義格式如下:
變量名=(元素1 元素2 ... 元素n)
1、例如,定義一個名為 numbers
的數組,其中包含 1、2、3 三個元素:
numbers=(1 2 3)
數組的元素可以通過索引來訪問。索引從 0 開始,例如:
echo ${numbers[0]}
輸出:
1
讀取全部元素:
echo ${numbers[@]}
輸出
1 2 3
也可以使用 for
循環來遍歷數組:
for i in "${numbers[@]}"
doecho "$i"
done
輸出:
1
2
3
實驗示例
# 定義一個名為 `fruits` 的數組,其中包含 "apple"、"banana"、"orange" 三個元素
fruits=(apple banana orange)# 遍歷數組
for fruit in "${fruits[@]}"
doecho "$fruit"
done# 獲取數組的長度
echo ${#fruits[@]}
輸出:
apple
banana
orange
3
shell 數組可以用于存儲多個值,可以用于各種場景。掌握 shell 數組的使用方法,可以幫助我們更好地使用 shell。