Uinx\Linux系统编程第十章
第十章 sh编程
10.1 sh脚本
sh脚本是一个包含sh语句的文本文件,命令解释程序sh要执行该语句。
10.2 sh脚本与C程序
这两者之间有一些相似之处,但在根本上是不同的。
sh是一个解释程序,逐行读取脚本文件并直接执行这些行。如果行是可执行命令且为内置命令,那么sh可直接执行。否则,他会复刻一个子进程来执行命令,并等其终止后再继续。
C语言必须先编译连接到一个二进制可执行文件,然后通过sh的子程序运行。
10.3 命令行参数
在 sh 脚本中,可以通过位置参数 $0、$1、$2 等访问命令行参数。通常,$0 是程序名本身,$1到 $n 是程序的参数。在 sh 中,可用内置变量 $# 和 $* 计数并显示命令行参数。
$# =命令行参数 $1到 $n 的数量
$*=所有命令行参数,包括 SO
此外,sh 还有与命令执行相关的以下内置变量。
$S =执行 sh 的进程 PID
$?=最后一个命令执行的退出状态(如果成功,则为 0,否则为非 0)
10.4 sh变量
所有的sh变量值都是字符串,未赋值的sh变量是NULL字符串
10.5sh中的引号
如想把$、/、*、<、>等用作普通字符,需要用\或者单引号来引用它们。通常,\用于引用单个字符,单引号用于引用长字符串。
10.7 sh命令
10.7.1 内置命令
sh 有许多内置命令,这些命令由 sh 执行,不需要创建一个新进程。
- file: 读取并执行文件。
- break [n]: 从最近的第 n 个套循环中退出
- cd[dirname]:更换目录。
- continue [n]:重启最近的第 n 个套循环
- eval[arg ..]:计算一次参数让sh 执行生成的命令
- excc [arg...]:通过这个 sh 执行命令,h将会退山
- exit [n]:使 sh 退山,退山状态为n。
- export [var ...]:将变导出到随后执行的命令
- read [var ...]:从 stdin 中读取一行非为变赋值
- set [arg ...]:在执行环境中设置变量。
- shift:将位置参数 S2 S3...重命名为 SIS2...。
- trap [arg][n]:接收到信号n 后执行参数。
- umask [ddd]:将掩码设置为八进制数 ddd 的。
- wait [pid]:等待进 pid,如果没有给出 pid,则等待所有活动子进程。
- read 命令:当sh 执行 read 命令时,它会等待来自 stdin 的输人行。它将输人行划分为几个标记,分配给列出的变量。read 的一个常见用法是允许用户与正在执行的 sh 进行交互
10.7.2 Linux命令
sh 可以执行所有的 Linux 命令。
echo 命令 : echo 只是将参数字符串作为行回显到 stdout。它通常将相邻的多个空格压缩为一个空格,除非有引号。
expr 命令 :因为所有的 sh 变量都是字符串,所以我们不能直接把它们改为数值。
管道命令 :在 脚木中经常使用管道作为过滤器。
除了上面的 Linux 命令之外,sh 还使用许多其他实用程序作为命令。
- awk:数据处理程序
- cmp:比较两个文件。
- comm:选择两个排序文件共有的行。
- grep:匹配一系列文件的模式。
- dim:找出两个文件的差异。
- join:通过使用相同的键来连接记录以比较两个文件。
- sed: 流或行编辑命令。
- sort:排序或合并文件。
- tail:打印某个文件的最后 n 行
- tr:一对一字符翻译。
- uniq: 从文件中删除连续重复行
10.10 I/O重定向
当进入 sh 命令时,我们可以指示 sh 将I/O重定向到除默认 stdin、stdout 和 sterr 以外的文件。I/O 重定向有以下形式和含义:
- >file stdout转向文件,如果文件不存在,将会创建文件。
- >>file stdout追加到文件。
- < file 将文件用作 stdin;文件必须存在并具有r权限。
- << word 从“here”文件中获取输人,直到只包含“word”的行。
关于问题与AI的苏格拉底式提问与解答
1、
2、