Unix / Linux - Shell基本操作符

你好,有抱负的程序员们!我很高兴能引导你们进入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 字符串为空 [ -z $a ]
-n 字符串不为空 [ -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