📜  Unix / Linux-Shell基本操作员

📅  最后修改于: 2020-10-31 14:52:57             🧑  作者: Mango


每个shell支持各种运算符。在本章中,我们将详细讨论Bourne shell(默认shell)。

我们现在将讨论以下运算符-

  • 算术运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试操作员

Bourne Shell最初没有任何执行简单算术运算的机制,但它使用awkexpr外部程序。

以下示例显示如何将两个数字相加-

#!/bin/sh

val=`expr 2 + 2`
echo "Total value : $val"

上面的脚本将产生以下结果-

Total value : 4

添加时需要考虑以下几点-

  • 运算符和表达式之间必须有空格。例如,2 + 2不正确;应该写成2+ 2。

  • 完整的表达式应放在之间,称为反引号。

算术运算符

Bourne Shell支持以下算术运算运算符。

假设变量a持有10,变量b持有20,则-

显示范例

Operator Description Example
+ (Addition) Adds values on either side of the operator `expr $a + $b` will give 30
– (Subtraction) Subtracts right hand operand from left hand operand `expr $a – $b` will give -10
* (Multiplication) Multiplies values on either side of the operator `expr $a \* $b` will give 200
/ (Division) Divides left hand operand by right hand operand `expr $b / $a` will give 2
% (Modulus) Divides left hand operand by right hand operand and returns remainder `expr $b % $a` will give 0
= (Assignment) Assigns right operand in left operand a = $b would assign value of b into a
== (Equality) Compares two numbers, if both are same then returns true. [ $a == $b ] would return false.
!= (Not Equality) Compares two numbers, if both are different then returns true. [ $a != $b ] would return true.

理解所有条件表达式都应该在方括号内且周围带有空格非常重要,例如[$ a == $ b]是正确的,而[$ a == $ b]是不正确的。

所有算术运算都是使用长整数完成的。

关系运算符

Bourne Shell支持以下特定于数值的关系运算符。这些运算符不适用于字符串值,除非它们的值是数字。

例如,下面的运算符将检查10和20之间以及“ 10”和“ 20”之间的关系,而不是“十”和“二十”之间的关系。

假设变量a持有10而变量b持有20然后-

显示范例

Operator Description Example
-eq Checks if the value of two operands are equal or not; if yes, then the condition becomes true. [ $a -eq $b ] is not true.
-ne Checks if the value of two operands are equal or not; if values are not equal, then the condition becomes true. [ $a -ne $b ] is true.
-gt Checks if the value of left operand is greater than the value of right operand; if yes, then the condition becomes true. [ $a -gt $b ] is not true.
-lt Checks if the value of left operand is less than the value of right operand; if yes, then the condition becomes true. [ $a -lt $b ] is true.
-ge Checks if the value of left operand is greater than or equal to the value of right operand; if yes, then the condition becomes true. [ $a -ge $b ] is not true.
-le Checks if the value of left operand is less than or equal to the value of right operand; if yes, then the condition becomes true. [ $a -le $b ] is true.

理解所有条件表达式都应放在方括号内并在其周围留有空格非常重要。例如, [$ a <= $ b]是正确的,而[$ a <= $ b]是不正确的。

布尔运算符

Bourne Shell支持以下布尔运算符。

假设变量a持有10而变量b持有20然后-

显示范例

Operator Description Example
! This is logical negation. This inverts a true condition into false and vice versa. [ ! false ] is true.
-o This is logical OR. If one of the operands is true, then the condition becomes true. [ $a -lt 20 -o $b -gt 100 ] is true.
-a This is logical AND. If both the operands are true, then the condition becomes true otherwise false. [ $a -lt 20 -a $b -gt 100 ] is false.

字符串运算符

Bourne Shell支持以下字符串运算符。

假设变量a持有“ abc”,变量b持有“ efg”,则-

显示范例

Operator Description Example
= Checks if the value of two operands are equal or not; if yes, then the condition becomes true. [ $a = $b ] is not true.
!= Checks if the value of two operands are equal or not; if values are not equal then the condition becomes true. [ $a != $b ] is true.
-z Checks if the given string operand size is zero; if it is zero length, then it returns true. [ -z $a ] is not true.
-n Checks if the given string operand size is non-zero; if it is nonzero length, then it returns true. [ -n $a ] is not false.
str Checks if str is not the empty string; if it is empty, then it returns false. [ $a ] is not false.

文件测试操作员

我们有一些运算符可用于测试与Unix文件相关的各种属性。

假设变量文件拥有一个现有文件名“ test”,其大小为100字节,并且具有对-的读取写入执行权限

显示范例

Operator Description Example
-b file Checks if file is a block special file; if yes, then the condition becomes true. [ -b $file ] is false.
-c file Checks if file is a character special file; if yes, then the condition becomes true. [ -c $file ] is false.
-d file Checks if file is a directory; if yes, then the condition becomes true. [ -d $file ] is not true.
-f file Checks if file is an ordinary file as opposed to a directory or special file; if yes, then the condition becomes true. [ -f $file ] is true.
-g file Checks if file has its set group ID (SGID) bit set; if yes, then the condition becomes true. [ -g $file ] is false.
-k file Checks if file has its sticky bit set; if yes, then the condition becomes true. [ -k $file ] is false.
-p file Checks if file is a named pipe; if yes, then the condition becomes true. [ -p $file ] is false.
-t file Checks if file descriptor is open and associated with a terminal; if yes, then the condition becomes true. [ -t $file ] is false.
-u file Checks if file has its Set User ID (SUID) bit set; if yes, then the condition becomes true. [ -u $file ] is false.
-r file Checks if file is readable; if yes, then the condition becomes true. [ -r $file ] is true.
-w file Checks if file is writable; if yes, then the condition becomes true. [ -w $file ] is true.
-x file Checks if file is executable; if yes, then the condition becomes true. [ -x $file ] is true.
-s file Checks if file has size greater than 0; if yes, then condition becomes true. [ -s $file ] is true.
-e file Checks if file exists; is true even if file is a directory but exists. [ -e $file ] is true.

C Shell运算符

以下链接将为您简要介绍C Shell运算符-

C Shell运算符

光环壳算子

以下链接可帮助您了解Korn Shell运算符-

光环壳算子