Unix / Linux - Shell 基本運算符
Hello, 有志者程式設計師!我很興奮能帶領你進入Unix/Linux shell運算符的迷人世界。作為一個教計算機科學超過十年的老師,我可以向你保證,掌握這些運算符將會在你編程旅程中產生遊戲規則的改變。讓我們一起來探索吧!
算術運算符
算術運算是shell腳本中數學操作的基本組成部分。它們允許我們在腳本內進行基本計算。
這裡是一個最常見的算術運算符表格:
運算符 | 描述 | 範例 |
---|---|---|
+ | 加法 | expr $a + $b |
- | 減法 | expr $a - $b |
* | 乘法 | expr $a \* $b |
/ | 除法 | expr $a / $b |
% | 取模 | expr $a % $b |
= | 賦值 | a=$b |
讓我們看一個實際範例:
#!/bin/bash
a=10
b=5
echo "加法: `expr $a + $b`"
echo "減法: `expr $a - $b`"
echo "乘法: `expr $a \* $b`"
echo "除法: `expr $a / $b`"
echo "取模: `expr $a % $b`"
在這個腳本中,我們使用expr
命令來進行算術運算。反引號()用於執行
expr`命令並替換其輸出。
當你運行這個腳本時,你會看到:
加法: 15
減法: 5
乘法: 50
除法: 2
取模: 0
記住,在shell腳本中,空格是關鍵的。expr$a+$b
將無法工作,但expr $a + $b
可以。這就像給你的變量留出呼吸空間一樣!
関係運算符
關係運算是用於比較值的。它們對於在腳本中創建條件是必不可少的。
這裡是一個關係運算符的表格:
運算符 | 描述 | 範例 |
---|---|---|
-eq | 等於 | [ $a -eq $b ] |
-ne | 不等於 | [ $a -ne $b ] |
-gt | 大於 | [ $a -gt $b ] |
-lt | 小於 | [ $a -lt $b ] |
-ge | 大於或等於 | [ $a -ge $b ] |
-le | 小於或等於 | [ $a -le $b ] |
讓我們看看這些運算符是如何工作的:
#!/bin/bash
a=10
b=20
if [ $a -eq $b ]
then
echo "$a 是等於 $b"
elif [ $a -gt $b ]
then
echo "$a 是大於 $b"
else
echo "$a 是小於 $b"
fi
這個腳本使用關係運算符來比較a
和b
。當你運行它時,你會看到:
10 是小於 20
專業提示:將這些運算符視為提問。"-eq"就像問"這些是否相等?","-gt"則像問"這個是否大於那個?"。當你寫腳本時,將這些比較發聲出來會有幫助。
布爾運算符
布爾運算符允許我們組合多個條件。它們就像是你的腳本中的邏輯膠水。
這裡是一個布爾運算符的表格:
運算符 | 描述 | 範例 |
---|---|---|
! | NOT | [ ! false ] |
-o | OR | [ $a -lt 20 -o $b -gt 100 ] |
-a | AND | [ $a -lt 20 -a $b -gt 100 ] |
讓我們在腳本中使用它們:
#!/bin/bash
a=10
b=20
if [ $a -lt 20 -a $b -gt 15 ]
then
echo "兩個條件都是真"
else
echo "至少有一個條件是假"
fi
當你運行這個腳本時,你會看到:
兩個條件都是真
我喜歡把布爾運算符視為決策工具。它們幫助你的腳本基於多個因素進行選擇,就像我們在真實生活中一樣!
字串運算符
字串運算是用於比較和操縱文本字串的。它們在處理文本數據時非常有用。
這裡是一個字串運算符的表格:
運算符 | 描述 | 範例 |
---|---|---|
= | 等於 | [ $a = $b ] |
!= | 不等於 | [ $a != $b ] |
-z | 字串為null | [ -z $a ] |
-n | 字串不是null | [ -n $a ] |
str | 字串不是空 | [ $a ] |
讓我們看看這些運算符是如何工作的:
#!/bin/bash
a="Hello"
b="World"
if [ $a = $b ]
then
echo "字串相等"
elif [ -z $a ]
then
echo "字串a是空的"
elif [ -n $b ]
then
echo "字串b不是空的"
else
echo "以上條件均不為真"
fi
當你運行這個腳本時,你會得到:
字串b不是空的
字串運算符就像是shell腳本中的語法規則。它們幫助你理解腳本正在处理的文本。
檔案測試運算符
檔案測試運算是用於測試不同檔案條件的。當你的腳本需要與檔案和目錄交互時,它們是必不可少的。
這裡是一些常見的檔案測試運算符:
運算符 | 描述 | 範例 |
---|---|---|
-d file | 目錄存在 | [ -d $file ] |
-f file | 檔案存在且是普通檔案 | [ -f $file ] |
-r file | 檔案可讀 | [ -r $file ] |
-w file | 檔案可寫 | [ -w $file ] |
-x file | 檔案可執行 | [ -x $file ] |
-s file | 檔案不是零大小 | [ -s $file ] |
讓我們在腳本中使用它們:
#!/bin/bash
file="/etc/passwd"
if [ -f $file ]
then
echo "檔案存在"
if [ -r $file ]
then
echo "檔案可讀"
fi
if [ -w $file ]
then
echo "檔案可寫"
fi
if [ -x $file ]
then
echo "檔案可執行"
fi
else
echo "檔案不存在"
fi
當你運行這個腳本時,你可能會看到:
檔案存在
檔案可讀
檔案測試運算是你的腳本的檔案偵探工具。它們幫助你的腳本了解它可以和不同的檔案進行哪些操作。
C Shell 運算符
C Shell(csh)有一套與Bourne Shell稍有不同的運算符。以下是一些例子:
#!/bin/csh
set a = 10
set b = 20
if ($a == $b) then
echo "a 等於 b"
else if ($a != $b) then
echo "a 不等於 b"
endif
if ($a > $b) then
echo "a 大於 b"
else if ($a < $b) then
echo "a 小於 b"
endif
在C Shell中,我們使用==
表示等於,使用!=
表示不等於。我們也可以直接使用>
和<
進行比較。
Korn Shell 運算符
Korn Shell(ksh)結合了Bourne Shell和C Shell的特性。以下是一個例子:
#!/bin/ksh
a=10
b=20
if ((a == b))
then
print "a 等於 b"
elif ((a != b))
then
print "a 不等於 b"
fi
if ((a > b))
then
print "a 大於 b"
elif ((a < b))
then
print "a 小於 b"
fi
在Korn Shell中,我們可以使用((
和))
進行算術運算和比較,這使得語法更清晰、更直觀。
記住,實踐使人完美!不要害怕在您自己的腳本中嘗試這些運算符。每次你使用它們,你會變得越來越熟悉和熟練。快樂編程!
Credits: Image by storyset