《Unix/Linux系统编程》第十章学习笔记
sh编程
本章讨论了sh编程,阐述了sh脚本和不同版本的sh;比较了sh脚本与C程序,并指出了解释语言和编译语言的区别;详细说明了如何编写sh脚本,包括sh变量、sh语句、sh内置命令、常规系统命令和命令替换;解释了sh控制语旬,包括测试条件、for循环、 while 循环、do-until循环、case语句等;说明了如何编写 sh 函数以及使用参数调用 sh 函数。
sh脚本
sh脚本是一个包含sh语句的文本文件,命令解释程序sh要执行该语句。
sh脚本与C程序
这两者之间有一些相似之处,但在根本上是不同的。
sh是一个解释程序,逐行读取脚本文件并直接执行这些行。如果行是可执行命令且为内置命令,那么sh可直接执行。否则,他会复刻一个子进程来执行命令,并等其终止后再继续。
C语言必须先编译连接到一个二进制可执行文件,然后通过sh的子程序运行。
命令行参数
可使用与运行sh命令完全相同的参数调用sh脚本。
$#=命令行参数$1到$n的数量
$*=所有命令行参数,包括$0
$S=执行sh的进程PID
$?=最后一个命令执行的退出状态(成功为0)
sh中的引号
想要把特殊字符用作普通字符,可使用\或单引号。
sh命令
- .file :读取并执行文件。
- break [n]:从最近的第 n 个嵌套循环中退出。
- cd [dirname]:更换目录。
- continue [n]:重启最近的第 n 个嵌套循环。
- eval [arg...]:计算一次参数并让sh执行生成的命令。
- exec [arg...]:通过这个 sh 执行命令, sh 将会退出。
- exit[n]:使 sh 退出,退出状态为 n 。
- export [var...]:将变量导出到随后执行的命令。
- read [var...]:从 stdin 中读取一行并为变量赋值。
- set [arg...]:在执行环境中设置变量。
- shift :将位置参数$2 $3...重命名为$1 $2...
- trap [arg[n]:接收到信号 n 后执行参数。
- umask [ ddd ]:将掩码设置为八进制数 ddd 的。
- wait [pid];等待进程 pid ,如果没有给出 pid ,则等待所有活动子进程。
- read 命令:当 sh 执行 read 命令时,它会等待来自 stdin 的输入行。它将输人行划分为几个标记,分配给列出的变量。
sh控制语句
if-else-if语句
test string1 COMP string2 OR [string1 COMP string2]
除了比较字符串或数值,还可以测试文件操作中的文件类型和文件属性。
for语句
点击查看代码
for VARIABLE in string1 string2...stringn
do
commands
done
while语句
点击查看代码
while [confition]
do
commands
done
I/O重定向
当进入sh命令时,我们可以指示sh将I/O重定向到除默认文件意外的文件。
>file stdout转向文件,如果文件不存在,将会创建文件。
>>file stdout追加到文件。
<file 将文件用作stdin;文件必须存在并具有r权限。
<<word 从“here”文件中获取输入,直到只包含“word”的行。
学习一门程序设计语言有哪些必备的要素和技能?
我认为学习程序设计语言必需的技能是实践与纠错。实践让我们对于语法以及相关的知识点印象更加深刻,完成一项任务后需要纠错与反思,如果有能力的话要进行改进。这样的过程才会将一门语言融会贯通。