Bash编程:条件表达式、控制结构与实用命令详解
立即解锁
发布时间: 2025-08-22 01:11:56 阅读量: 2 订阅数: 10 


UNIX编程与系统管理实战指南
### Bash编程:条件表达式、控制结构与实用命令详解
#### 1. 算术运算与条件表达式
在Bash中,我们可以方便地进行算术运算和条件判断。首先,使用`declare –i`可以将变量定义为整数类型,这样在进行整数运算时会更加高效,因为整数运算比浮点运算速度更快。例如:
```bash
declare –i testval=20
declare –i count=2
```
算术运算可以通过将操作放在双括号`(( ))`内来实现,常见的算术运算符如下表所示:
| 运算符 | 描述 |
| ---- | ---- |
| + | 加法 |
| - | 减法 |
| ++ | 自增 |
| -- | 自减 |
| * | 乘法 |
| / | 除法 |
| % | 取余 |
| ** | 幂运算 |
算术测试同样使用双括号,常见的算术条件运算符如下:
| 运算符 | 描述 |
| ---- | ---- |
| <= | 小于等于 |
| >= | 大于等于 |
| < | 小于 |
| > | 大于 |
| == | 等于 |
| != | 不等于 |
| ! | 逻辑非 |
| && | 逻辑与 |
| || | 逻辑或 |
下面是一个简单的示例,用于找出能整除20的数:
```bash
#!/bin/bash
#
declare –i testval=20
declare –i count=2 # start at 2, 1 always works
while (( $count <= $testval )); do
(( result = $testval % $count ))
if (( $result == 0 )); then
# evenly divisible
echo " $testval is evenly divisible by $count"
fi
(( count++ ))
done
```
运行这个脚本,输出结果如下:
```
20 is evenly divisible by 2
20 is evenly divisible by 4
20 is evenly divisible by 5
20 is evenly divisible by 10
20 is evenly divisible by 20
```
#### 2. 字符串比较与文件操作
Bash提供了丰富的字符串比较和文件操作的条件运算符。字符串比较运算符如下:
| 运算符 | 描述 |
| ---- | ---- |
| -n string | 字符串长度非零为真 |
| -z string | 字符串长度为零为真 |
| string1 == string2 | 字符串相等为真 |
| string1 != string2 | 字符串不相等为真 |
文件操作的条件运算符则可以帮助我们检查文件的各种属性,例如文件是否存在、是否为目录等。部分文件操作条件运算符如下:
| 运算符 | 描述 |
| ---- | ---- |
| -a file | 文件存在为真 |
| -b file | 文件存在且为块特殊文件为真 |
| -c file | 文件存在且为字符特殊文件为真 |
| -d file | 文件存在且为目录为真 |
| -e file | 文件存在为真 |
| -f file | 文件存在且为普通文件为真 |
下面是一个检查文件所有者的简单示例:
```bash
#!/bin/bash
#
if [ -O /etc/passwd ]; then
echo "you are the owner of /etc/passwd."
else
echo "you are NOT the owner of /etc/passwd."
fi
```
运行这个脚本,会输出你是否是`/etc/passwd`文件的所有者信息。
#### 3. 控制结构
为了更好地利用前面介绍的比较操作,Bash提供了多种控制结构,包括`case`、`if`、`for`、`while`和`until`语句。
##### 3.1 case语句
`case`语句允许我们根据变量的值匹配一个或多个模式,并执行相应的命令。其语法如下:
```bash
case word in pattern {| pattern }* ) commands ; ; esac
```
例如,根据NFL球队名称输出其主场位置:
```bash
case ${teamname[$index]} in
"Dallas Cowboys") echo "Dallas, TX" ;;
"Denver Broncos") echo "Denver, CO" ;;
"New York Giants"|"New York Jets") echo "New York, NY";;
*
```
0
0
复制全文
相关推荐










