"这篇文章主要介绍了shell编程的基础知识,包括变量的使用、命令外壳的执行方式、从标准输入读取变量的值以及bash的流程控制语句。"
在shell编程中,变量是至关重要的组成部分。shell变量分为两种类型:shell变量(只在当前shell会话中有效)和环境变量(对子shell也有效)。例如,在bash和pdksh中,我们可以直接通过`var1=1`的方式来赋值,但在tcsh中,需要使用`set var1=5`。对于数值运算,可以借助expr命令,如`expr $a + $b`或`expr 2 * (3 + 4)`。
shell中有一些特殊的预定义变量,比如:
- `$#`存储命令行参数的个数。
- `$?`存储上一个命令的退出状态,0表示成功,非0表示失败。
- `$0`存储当前shell脚本的名称。
- `$[1-n]`存储第n个命令行参数。
- `$*`存储所有参数,不包括脚本本身的名字。
- `$@`同样存储所有参数,但通常在双引号中使用以保持参数的独立性。
- `$$`存储shell脚本的进程ID。
- `$!`存储最后后台执行命令的进程ID。
执行shell程序有多种方式:
1. 直接指定shell解释器和脚本名,如`bash file1.sh`。
2. 在脚本首行添加shebang(#!/bin/bash),指示使用哪个shell来执行。
3. 使用`.`(在bash和pdksh中)或`source`(在tcsh中)命令来执行脚本,使得脚本作用于当前shell环境。
4. 命令替换,这里未详细展开。
bash的流程控制语句是控制程序执行路径的关键。其中:
- `if-then`语句用于条件判断,例如:
```bash
if command_1
then
command_2
command_3
fi
command_4
```
如果`command_1`执行成功,`command_2`和`command_3`将被执行,`command_4`始终执行。
- `if-then-else`语句允许在条件不满足时执行另一段代码,例如:
```bash
if command_1
then
command_2
else
command_3
fi
```
当`command_1`失败时,将执行`command_3`。
除此之外,还有`if-then-elif-else`、`case`语句、循环结构(`for`、`while`和`until`)等,它们共同构成了bash编程的流程控制框架。
通过`read`命令可以从标准输入读取用户输入的变量值,如`read a`会让用户输入并赋值给变量`a`。这些基本概念和语句是编写shell脚本的基础,掌握它们能帮助开发者编写出高效、实用的shell程序。