Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell基本运算符】
文章目录
- 一、Shell 基本运算符
- 二、算术运算符
- 三、关系运算符
- 四、布尔运算
- 五、字符串运算符
- 六、文件测试操作
- 七、C Shell 操作符
- 7.1 算术和逻辑运算符
- 7.2 文件测试操作
- 八、Korn Shell 运算符
- 8.1 算术和逻辑运算符
- 8.2 文件测试操作
- 九、总结
一、Shell 基本运算符
有各种不同的运算符shell都支持。本教程是基于默认shell(Bourne),所以我们要涵盖所有重要的 Bourne Shell
运算符。
有以下的运算符,我们将要讨论的:
- 算术运算符。
- 关系运算符。
- 布尔运算符。
- 字符串运算符。
- 文件测试操作。
Bourne shell
的最初并没有任何机制来执行简单的算术,但它使用外部程序,无论是 awk
或必须简单的程序 expr
。
下面是简单的例子,把两个数相加:
#!/bin/sh
val=`expr 2 + 2`
echo "Total value : $val"
这将产生以下结果:
Total value : 4
🎯记下有以下几点:
- 运算符和表达式之间必须有空格,例如
2+2
是不正确的,因为它应该写成2 + 2
。 - ``,称为倒逗号之间应包含完整的表达。
二、算术运算符
算术运算符有以下 Bourne Shell
支持。
假设变量 a=10
,变量 b=20
:
这是非常重要的,这里要注意,所有的条件式将放在方括号内,他们身边有一个空格,例如 [ $a == $b ]
是正确的,为 [$a==$b]
是不正确的。
所有的算术计算,使用长整数。
🌰举个例子:
#!/bin/sh
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a - $b`
echo "a - b : $val"
val=`expr $a * $b`
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"
val=`expr $b % $a`
echo "b % a : $val"
if [ $a == $b ]
then
echo "a is equal to b"
fi
if [ $a != $b ]
then
echo "a is not equal to b"
fi
这将产生以下结果:
a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a is not equal to b
🎯记下有以下几点:
- 运算符和表达式之间必须有空格,
2+2
是不正确的,它应该写成2 + 2
。 - ``,称为倒逗号之间应包含完整的表达。
- 应该用
*
符号的乘法。 if...then...fi
语句是下一章节中已经解释的决策声明。
三、关系运算符
Bourne Shell
的支持,关系运算符的具体数值。这些运算符不能使用字符串值,除非它们的值是数字。
🌰例如,运算符将努力检查10和20之间的关系,以及在“10”和“20”,但不是“10”和“21”之间。
假设变量a=10,变量b=20:
🎯这里要注意,所有的条件式将放在方括号内,他们周围有一个空格,这是非常重要的,例如
[ $a <= $b ]
是正确的,[$a <= $b]
是不正确的。
🌰举个例子:
#!/bin/sh
a=10
b=20
if [ $a -eq $b ]
then
echo "$a -eq $b : a is equal to b"
else
echo "$a -eq $b: a is not equal to b"
fi
if [ $a -ne $b ]
then
echo "$a -ne $b: a is not equal to b"
else
echo "$a -ne $b : a is equal to b"
fi
if [ $a -gt $b ]
then
echo "$a -gt $b: a is greater than b"
else
echo "$a -gt $b: a is not greater than b"
fi
if [ $a -lt $b ]
then
echo "$a -lt $b: a is less than b"
else
echo "$a -lt $b: a is not less than b"
fi
if [ $a -ge $b ]
then
echo "$a -ge $b: a is greater or equal to b"
else
echo "$a -ge $b: a is not greater or equal to b"
fi
if [ $a -le $b ]
then
echo "$a -le $b: a is less or equal to b"
else
echo "$a -le $b: a is not less or equal to b"
fi
这将产生以下结果:
10 -eq 20: a is not equal to b
10 -ne 20: a is not equal to b
10 -gt 20: a is not greater than b
10 -lt 20: a is less than b
10 -ge 20: a is not greater or equal to b
10 -le 20: a is less or equal to b
🎯注意:记下有以下几点:
-
运算符和表达式之间必须有空格,例如2+2是不正确的,它应该写成2 + 2。
-
if…then…else…fi 语句是下一章节中要解释的决策声明。
四、布尔运算
布尔运算符 有以下 Bourne Shell
的支持。
假设变量一个变量b=10,然后变量b=20:
🌰举个例子:
#!/bin/sh
a=10
b=20
if [ $a != $b ]
then
echo "$a != $b : a is not equal to b"
else
echo "$a != $b: a is equal to b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
then
echo "$a -lt 100 -a $b -gt 15 : returns true"
else
echo "$a -lt 100 -a $b -gt 15 : returns false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
then
echo "$a -lt 100 -o $b -gt 100 : returns true"
else
echo "$a -lt 100 -o $b -gt 100 : returns false"
fi
if [ $a -lt 5 -o $b -gt 100 ]
then
echo "$a -lt 100 -o $b -gt 100 : returns true"
else
echo "$a -lt 100 -o $b -gt 100 : returns false"
fi
🎯注意:记下有以下几点:
-
运算符和表达式之间必须有空格,例如2+2是不正确的,它应该写成2 + 2。
-
if…then…else…fi 语句是下一章节中要解释的决策声明。
五、字符串运算符
有下列字符串运算由 Bourne Shell
支持。
假设变量a=“abc”和变量b=“efg”:
🌰举个例子:
#!/bin/sh
a="abc"
b="efg"
if [ $a = $b ]
then
echo "$a = $b : a is equal to b"
else
echo "$a = $b: a is not equal to b"
fi
if [ $a != $b ]
then
echo "$a != $b : a is not equal to b"
else
echo "$a != $b: a is equal to b"
fi
if [ -z $a ]
then
echo "-z $a : string length is zero"
else
echo "-z $a : string length is not zero"
fi
if [ -n $a ]
then
echo "-n $a : string length is not zero"
else
echo "-n $a : string length is zero"
fi
if [ $a ]
then
echo "$a : string is not empty"
else
echo "$a : string is empty"
fi
这将产生以下输出结果:
abc = efg: a is not equal to b
abc != efg : a is not equal to b
-z abc : string length is not zero
-n abc : string length is not zero
abc : string is not empty
🎯注意:记下有以下几点:
-
运算符和表达式之间必须有空格,例如2+2是不正确的,它应该写成2 + 2。
-
if…then…else…fi 语句是下一章节中要解释的决策声明。
六、文件测试操作
有以下是操作测试 Unix
文件相关联的各种属性。
假设一个的变量文件保存现有文件名 “test”
,其大小为 100字节
,有读,写和执行权限:
下面是一个例子,它使用的所有文件测试操作:
假设一个变量的文件保存现有文件名 "/var/www/yiibai/unix/test.sh"
,其大小为100字节,读,写和执行权限:
#!/bin/sh
file="/var/www/yiibai/unix/test.sh"
if [ -r $file ]
then
echo "File has read access"
else
echo "File does not have read access"
fi
if [ -w $file ]
then
echo "File has write permission"
else
echo "File does not have write permission"
fi
if [ -x $file ]
then
echo "File has execute permission"
else
echo "File does not have execute permission"
fi
if [ -f $file ]
then
echo "File is an ordinary file"
else
echo "This is sepcial file"
fi
if [ -d $file ]
then
echo "File is a directory"
else
echo "This is not a directory"
fi
if [ -s $file ]
then
echo "File size is zero"
else
echo "File size is not zero"
fi
if [ -e $file ]
then
echo "File exists"
else
echo "File does not exist"
fi
这将产生以下输出结果:
File has read access
File has write permission
File has execute permission
File is an ordinary file
This is not a directory
File size is zero
File exists
🎯注意:记下有以下几点:
-
运算符和表达式之间必须有空格,例如2+2是不正确的,它应该写成2 + 2。
-
if…then…else…fi 语句是下一章节中要解释的决策声明。
七、C Shell 操作符
本教程列出了所有 C Shell
的运算符。在这里,大部分的运算符都是跟 C
语言编程很相似。
运算符优先级递减 的顺序如下:
7.1 算术和逻辑运算符
7.2 文件测试操作
有以下操作测试与 Unix
文件相关联的各种属性。
八、Korn Shell 运算符
本教程列出了所有 Korn Shell
中的运算符。在这里,大部分的运算符都是我们熟知的 C
语言编程很相似。
运算符优先级递减 的顺序如下列出:
8.1 算术和逻辑运算符
8.2 文件测试操作
有以下运算符测试可用在 Unix
文件中的相关联各种属性。
九、总结
Shell 语法的基本运算符其实和其它语言有很多相似之处,只要记住该语法的特别之处即可。如果对您有帮助,请点赞、收藏、评论吧💞