上一章Linux
shell编程请查看: shell数组定义和操作
这一章我们开始讨论shell的基本操作符和条件语句,这些都是shell编程的基本元素。
一、shell基本操作符每种shell都支持不同的操作符,我们这里将详细讨论Bourne shell(默认shell)。我们现在讨论以下的操作符:
- 算术运算符
- 关系运算符
- 布尔操作符
- 字符串运算符
#!/bin/bash value=http://www.srcmini.com/`expr 1 + 9`
echo"total value: $value"
在进行加法运算时需要考虑以下几点:
- 运算符和表达式之间必须有空格,例如2+2是不正确的而应该写成2 + 2。
- 完整的表达式应该包含在’ ‘ 之间称为反引号。
下列算术运算符由Bourne Shell支持(假设变量a=10,变量b=20):
操作符 | 描述 | 例子 |
+ (加法) | 在操作符的任意一侧添加值 | `expr $a + $b` 结果为30 |
– (减法) | 从左操作数减去右操作数 | `expr $a – $b` 结果为 -10 |
* (乘法) | 将运算符两边的值相乘 | `expr $a \* $b` 结果为 200 |
/ (除法) | 用右操作数除左操作数 | `expr $b / $a` 结果为 2 |
% (取模) | 将左操作数除以右操作数并返回余数 | `expr $b % $a` 结果为 0 |
= (赋值) | 分配右操作数给左操作数 | a = $b would 将b的值分配给a |
== (相等) | 比较两个数字,如果两个数字相同则返回true。 | [ $a == $b ] 返回false |
!= (不等) | 比较两个数字,如果两者不同则返回true。 | [ $a != $b ] 返回true |
2、关系元算符
Bourne Shell支持以下特定于数值的关系运算符,这些操作符不适用于字符串值,除非它们的值是数值。
例如下面的操作符将检查10和20之间的关系,而不是字符串“10”和“20”之间的关系(假设变量a为10,变量b为20)。
操作符 | 描述 | 例子 |
-eq | 检查两个操作数的值是否相等,如果是则条件为真。 | [ $a -eq $b ] 返回false |
-ne | 检查两个操作数的值是否相等,如果值不相等则条件为真。 | [ $a -ne $b ] 返回true |
-gt | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 | [ $a -gt $b ] 返回false |
-lt | 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 | [ $a -lt $b ] 返回true |
-ge | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 | [ $a -ge $b ] 不为true |
-le | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 | [ $a -le $b ] 返回true |
3、布尔操作符
Bourne Shell支持以下布尔操作符(假设变量a=10,变量b=20)
操作符 | 描述 | 例子 |
! | 逻辑否定:将真条件转化为假条件,反之亦然。 | [ ! false ] 返回true |
-o | 逻辑或:如果其中一个操作数为真,则条件为真。 | [ $a -lt 20 -o $b -gt 100 ]返回true |
-a | 这是逻辑与:如果两个操作数都为真,则条件为真,否则为假。 | [ $a -lt 20 -a $b -gt 100 ]返回false |
我们有一些操作符可以用来测试与Unix文件相关的各种属性,假设一个变量file拥有一个现有文件名“test”,它的大小为100字节,并且具有读、写和执行权限。
操作符 | 描述 | 例子 |
-b file | 检查文件是否是块特殊文件,如果是则条件为真。 | [ -b $file ]返回false |
-c file | 检查文件是否是字符专用文件,如果是则条件为真。 | [ -c $file ] 返回false. |
-d file | 检查文件是否为目录,如果是则条件为真。 | [ -d $file ] 不为true |
-f file | 检查文件是否是普通文件,而不是目录或特殊文件,如果是则条件为真。 | [ -f $file ] 返回true |
-g file | 检查文件是否设置了它的组ID (SGID)位,如果是则条件为真。 | [ -g $file ] 返回false. |
-k file | 检查文件是否有粘位设置,如果是则条件为真。 | [ -k $file ] 返回false. |
-p file | 检查文件是否是命名管道,如果是则条件为真。 | [ -p $file ] 返回false. |
-t file | 检查文件描述符是否打开并与终端相关联,如果是则条件为真。 | [ -t $file ] 返回false. |
-u file | 检查文件是否设置了用户ID (SUID)位,如果是则条件为真。 | [ -u $file ] 返回false. |
-r file | 检查文件是否可读,如果是则条件为真。 | [ -r $file ] 返回true |
-w file | 检查文件是否可写,如果是则条件为真。 | [ -w $file ] 返回true |
-x file | 检查文件是否可执行,如果是则条件为真。 | [ -x $file ] 返回true |
-s file | 检查文件大小是否大于0,如果是则条件为真。 | [ -s $file ] 返回true |
-e file | 检查文件是否存在,即使文件是一个目录但存在。 | [ -e $file ] 返回true |
Unix Shell支持条件语句,用于根据不同的条件执行不同的操作,现在我们来理解两个条件语句:if……else语句和case…esac语句。
1、if…else语句
If else语句是有用的决策语句,可以用来从给定的一组选项中选择一个选项,Unix Shell支持以下形式的if else语句:
- if…fi语句
- if…else…fi语句
- if…elif…else…fi语句
2、case…esac语句
你可以使用多个if…elif执行多路分支的语句,然而这并不总是最好的解决方案,特别是当所有分支都依赖于单个变量的值时。
【Linux shell编程(shell基本操作符和条件语句介绍和用法)】Unix Shell支持case…esac语句,Unix shell中的esac语句与switch非常相似,我们在其他编程语言中也有case语句,如C或c++和PERL等。
推荐阅读
- Linux shell编程(shell循环语句和循环控制介绍和用法全解)
- Linux shell编程(shell数组定义和操作详解)
- Linux shell编程(shell特殊变量完全介绍和使用教程)
- Linux shell编程(基本shell变量的定义和使用介绍)
- Linux shell编程之(什么是shell(shell脚本介绍及其操作))
- Unix和Linux信号捕获处理介绍及其相关操作教程
- Unix和Linux系统日志介绍和详细操作教程
- 贝塞斯达戏弄“最大的发动机大修”,托德·霍华德(Todd Howard)变得非常糊涂
- 凯纳(Kena)幕后花絮(精神之桥的和谐合作)