Unix / Linux - Shell基本操作符
你好,有抱负的程序员们!我很高兴能引导你们进入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 | 字符串为空 | [ -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