Unix / Linux - 特殊變量
你好,有抱負的程序员們!我很高興能成為你們在Unix和Linux特殊變量世界的向導。作為一個教了多年計算機科學的人,我可以向你們保證,掌握這些概念將會在你們的編程冒險中改變遊戲規則。那麼,我們來深入探討一下吧!
特殊變量的介紹
在我們深入細節之前,讓我們先了解一下特殊變量是什麼。在Unix和Linux中,特殊變量是預定義的變量,它們包含關於shell環境和當前進程的特定信息。它們就像shell世界的秘密情報員,總是準備著關鍵的情報!
命令行參數
什麼是命令行參數?
命令行參數是在你運行腚本時提供給腚本的額外信息。它們就像在機器人開始任務前給予的指示。
讓我們看一個簡單的例子:
#!/bin/bash
echo "Hello, $1!"
如果我們將這個腚本保存為 greet.sh
並運行它,使用 ./greet.sh Alice
,它將輸出:
Hello, Alice!
在這裡,$1
是一個特殊變量,代表第一個命令行參數。
使用多個參數
我們不限於只有一個參數。讓我們擴展我們的腚本:
#!/bin/bash
echo "Hello, $1! Welcome to $2."
現在,如果我們運行 ./greet.sh Alice Wonderland
,我們會得到:
Hello, Alice! Welcome to Wonderland.
在這裡,$1
代表 "Alice",而 $2
代表 "Wonderland"。
變量 $0
還有一個值得提及的特殊變量:$0
。這個變量代表腚本本身的名稱。讓我們修改我們的腚本:
#!/bin/bash
echo "This script is called $0"
echo "Hello, $1! Welcome to $2."
運行 ./greet.sh Alice Wonderland
現在輸出:
This script is called ./greet.sh
Hello, Alice! Welcome to Wonderland.
特殊參數 $* 和 $@
現在,讓我們來討論兩個非常有用的特殊參數:$*
和 $@
。這些就像命令行參數的動態二重奏!
變量 $*
$*
變量代表所有命令行參數作為一個字符串。它就像把所有參數放在一個籃子裡。這裡有一個例子:
#!/bin/bash
echo "All arguments using \$*: $*"
如果我們用 ./args.sh apple banana cherry
運行這個腚本,我們會得到:
All arguments using $*: apple banana cherry
變量 $@
$@
變量與此相似,但它將每個參數視為一個獨立的實體。它就像把每個參數放在自己的小盒子裡。讓我們看看它是如何工作的:
#!/bin/bash
echo "All arguments using \$@:"
for arg in "$@"
do
echo $arg
done
使用 ./args.sh apple banana cherry
運行這個腚本會得到:
All arguments using $@:
apple
banana
cherry
變量 $* 和 $@ 的區別
你可能會想,"我看起來它們一樣啊!" 好吧,當我們在雙引號中使用它們時,區別就會變得明顯。讓我們創建一個腚本来演示:
#!/bin/bash
echo "Using \$*:"
for arg in "$*"
do
echo $arg
done
echo "Using \$@:"
for arg in "$@"
do
echo $arg
done
如果我們用 ./difference.sh "Hello World" OpenAI ChatGPT
運行這個腚本,我們會得到:
Using $*:
Hello World OpenAI ChatGPT
Using $@:
Hello World
OpenAI
ChatGPT
看到區別了嗎?"$*"
將所有參數視為一個字符串,而 "$@"
則保留個別參數。
終止狀態
最後但同樣重要的是,我們來討論終止狀態。在Unix和Linux中,每個命令在執行完畢後都會返回一個終止狀態。這個狀態是一個介於0到255之間的數字,其中0通常表示成功,而任何其他數字表示錯誤。
變量 $?
最後執行的命令的終止狀態存儲在 $?
變量中。讓我們看看它是如何工作的:
#!/bin/bash
ls /nonexistent_directory
echo "Exit status of ls command: $?"
echo "Hello, World!"
echo "Exit status of echo command: $?"
運行這個腚本可能會輸出:
ls: cannot access '/nonexistent_directory': No such file or directory
Exit status of ls command: 2
Hello, World!
Exit status of echo command: 0
ls
命令失敗(終止狀態2),而 echo
命令成功(終止狀態0)。
在腚本中使用終止狀態
我們可以使用終止狀態在腚本中做出決策。這裡有一個例子:
#!/bin/bash
ping -c 1 google.com > /dev/null
if [ $? -eq 0 ]
then
echo "Internet is working!"
else
echo "Internet is not working!"
fi
這個腚本ping Google一次並檢查終止狀態。如果是0(成功),則表示互聯網在工作。
結論
恭喜你們!你們剛剛在Unix/Linux編程旅程中邁出了很大的一步。這些特殊變量可能看起來很小,但它們是你編程工具包中非常強大的工具。記住,熟練才能完美,所以不要猶豫,在你自己的腚本中實驗這些概念。
這裡是我們討論過的特殊變量的快速參考表:
變量 | 描述 |
---|---|
$0 | 腚本的名稱 |
$1, $2, ... | 命令行參數 |
$* | 所有參數作為一個字符串 |
$@ | 所有參數作為分離的字符串 |
$? | 最後命令的終止狀態 |
持續編碼,持續學習,最重要的是,玩得開心!直到下一次,快樂腚本!
Credits: Image by storyset