Unix / Linux - Shell 基本運算符

Hello, 有志者程式設計師!我很興奮能帶領你進入Unix/Linux shell運算符的迷人世界。作為一個教計算機科學超過十年的老師,我可以向你保證,掌握這些運算符將會在你編程旅程中產生遊戲規則的改變。讓我們一起來探索吧!

Unix / Linux - Basic Operators

算術運算符

算術運算是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

這個腳本使用關係運算符來比較ab。當你運行它時,你會看到:

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