Unix 简明教程
Unix / Linux - Shell Basic Operators
每个 shell 都支持各种运算符。我们将在本章详细讨论 Bourne shell(默认 shell)。
There are various operators supported by each shell. We will discuss in detail about Bourne shell (default shell) in this chapter.
我们现在将讨论以下运算符 -
We will now discuss the following operators −
-
Arithmetic Operators
-
Relational Operators
-
Boolean Operators
-
String Operators
-
File Test Operators
Bourne shell 最初没有任何执行简单算术运算的机制,但它使用外部程序,要么是 awk ,要么是 expr 。
Bourne shell didn’t originally have any mechanism to perform simple arithmetic operations but it uses external programs, either awk or expr.
以下示例显示了如何添加两个数字 -
The following example shows how to add two numbers −
#!/bin/sh
val=`expr 2 + 2`
echo "Total value : $val"
上述脚本会生成以下结果 -
The above script will generate the following result −
Total value : 4
在添加时需要考虑以下几点 -
The following points need to be considered while adding −
-
There must be spaces between operators and expressions. For example, 2+2 is not correct; it should be written as 2 + 2.
-
The complete expression should be enclosed between ‘ ‘, called the backtick.
Arithmetic Operators
Bourne Shell 支持以下算术运算符。
The following arithmetic operators are supported by Bourne Shell.
假设变量 a 为 10,变量 b 为 20,那么 -
Assume variable a holds 10 and variable b holds 20 then −
Operator |
Description |
Example |
+ (Addition) |
Adds values on either side of the operator |
|
- (Subtraction) |
Subtracts right hand operand from left hand operand |
|
* (Multiplication) |
Multiplies values on either side of the operator |
|
/ (Division) |
Divides left hand operand by right hand operand |
|
% (Modulus) |
Divides left hand operand by right hand operand and returns remainder |
|
= (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] 是不正确的。
It is very important to understand that all the conditional expressions should be inside square braces with spaces around them, for example [ $a == $b ] is correct whereas, [$a==$b] is incorrect.
所有算术运算都使用长整数进行。
All the arithmetical calculations are done using long integers.
Relational Operators
Bourne Shell 支持以下特定于数值的关联运算符。这些运算符不适用于字符串值,除非其值为数值。
Bourne Shell supports the following relational operators that are specific to numeric values. These operators do not work for string values unless their value is numeric.
例如,以下运算符将用于检查 10 和 20 之间的关系以及 "10" 和 "20" 之间的关系,但不用于检查 "ten" 和 "twenty" 之间的关系。
For example, following operators will work to check a relation between 10 and 20 as well as in between "10" and "20" but not in between "ten" and "twenty".
假设变量 a 为 10,变量 b 为 20,那么 -
Assume variable a holds 10 and variable b holds 20 then −
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] 错误。
It is very important to understand that all the conditional expressions should be placed inside square braces with spaces around them. For example, [ $a ⇐ $b ] is correct whereas, [$a ⇐ $b] is incorrect.
Boolean Operators
Bourne Shell 支持以下布尔运算符。
The following Boolean operators are supported by the Bourne Shell.
假设变量 a 为 10,变量 b 为 20,那么 -
Assume variable a holds 10 and variable b holds 20 then −
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. |
String Operators
Bourne Shell 支持以下字符串运算符。
The following string operators are supported by Bourne Shell.
假设 a 变量保存了“abc”, b 变量保存了“efg”,则 −
Assume variable a holds "abc" and variable b holds "efg" then −
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. |
File Test Operators
我们有几个运算符,可用于测试与 Unix 文件关联的各种属性。
We have a few operators that can be used to test various properties associated with a Unix file.
假设变量 file 保存现有文件名“test”,其大小为 100 字节,对 − 的权限为 read 、 write 和 execute
Assume a variable file holds an existing file name "test" the size of which is 100 bytes and has read, write and execute permission on −
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 Operators
以下链接将给您简要了解 C Shell 算符−
Following link will give you a brief idea on C Shell Operators −