📅  最后修改于: 2020-10-31 14:52:57             🧑  作者: Mango
每个shell支持各种运算符。在本章中,我们将详细讨论Bourne shell(默认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,则-
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运算符-
以下链接可帮助您了解Korn Shell运算符-