第十章的主要内容是sh编程,包括以下几个方面:
- sh脚本和不同版本sh
- 比较了sh脚本和C程序
- sh变量、sh语句、sh内置命令、常规系统命令和命令替换
- sh控制语句
- sh函数编写以及使用参数调用sh函数
一、知识点归纳以及自己最有收获的内容
1.sh脚本
- sh脚本是一个包含sh语句的文本文件,命令行解释程序sh要执行该语句。
#! /bin/bash # comment line echo hello
- 使用 chmod -x mysh 使其可执行,然后运行该文本文件。sh脚本第一行以#!开始
2.sh脚本与C程序
- sh脚本和C程序有一些相似之处,但它们在根本上是不同的。
- sh是一个解释程序,逐行读取sh脚本文件并直接执行这些行。若是可执行命令且为内置命令则直接执行,否则复刻一个子进程来执行命令,并等待子进程终止再继续。
- C语言必须先编译链接到一个二进制可执行文件,然后通过主sh的子进程运行二进制可执行文件,每个变量必须有一个类型,必须有main()函数。
- 每个变量都是字符串,sh脚本不需要main函数,第一个可执行语句是程序的入口点。
3.命令行参数
- 可使用与运行sh命令完全相同的参数调用sh脚本
- 可通过位置参数$0、$1、$2等访问命令行参数,10以上参数必须称为${n}
- 可用内置变量$#和$*计数并显示命令行参数
- $# = 命令行参数$1到$n的数量
- $* = 所以命令行参数,包括$0
- $S = 执行sh的进程PID
- $? = 最后一个命令执行的退出状态
4.sh变量
-
除了内置变量,用户可以使用任何符号作为sh变量,不需要声明。
-
所有sh变量值都是字符串,未赋值的sh变量是NULL字符串。
- 如果A是一个变量,那么$A是变量的值
variable=string
5.sh中的引号
- sh中的特殊字符,如$、/、*、>、<等,要想把它们用作普通字符,可使用\或单引号来引用它们
- 单引号用于引用长字符串,双引号用于保留双引号字符串中的空格。
6.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的输入行。
7.Linux命令
- echo命令:echo只是将参数字符串作为行回显到stdout,通常将相邻的多个空格压缩为一个空格,除非有冒号
- expr命令:将两个参数字符串转换为数字,然后对数字执行操作OP,再将得到的数字转换回字符串
expr string1 op string2
- 管道命令:在sh中经常使用管道作为过滤器
ps -ax | grep httpd
cat file | grep word
- 其他实用命令:
- axk:数据处理程序。
- cmp:比较两个文件。
- comm:选择两个排序文件共有的行。
- grep:匹配一系列文件的模式。
- diff:找出两个文件的差异。
- join:通过使用相同的键来连接记录以比较两个文件。
- sed:流或行编辑命令。
- sort:排序或合并文件。
- tail:打印某个文件的最后口行。
- tr:一对一宇符翻译。
- uniq:从文件中删除连续重复行。
8.命令替换
- 在sh中,$A会被替换成A值。同样,当sh遇到‘cmd’或$(cmd)时,它会先执行cmd,然后用执行的结果字符串替换成$(cmd)。
echo $(ls dir)
9.sh控制语句
- if-else-fi语句
if [condition] then statemates else statements fi
- for语句
for VARIABLE in string1 string2 ... stringn do commands done
- while语句
while [condition] do commands done
- until-do语句
until [$ANS = "give up"] do echo -n "enter your answer" read ANS done
- case 语句
case $variable in pattern1) commands;; pattern2) commands;; patternn) commands;; esac
10.I/O重定向
- >file :stdout转向文件,如果文件不存在,将会创建文件
- >>file:stdout追加文件
- <file :将文件用作stdin;文件必须存在并具有r权限
- <<word :从“here”文件中获取输入,直到包含“word”
11.调试sh脚本
bash -x mysh
二、问题与解决思路
- 问题:大家学习过Python,C,Java等语言,总结一下一门程序设计语言有哪些必备的要素和技能?这些要素和技能在shell脚本中是如果呈现出来的?
解决:程序设计语言的基本元素是运算符和表达式,必备技能就是该编程语言的基本语句,语义,语用。shell脚本本身和c语言有着许多相似之处,包括一些逻辑控制语句、linux操作命令,同时也有不同的函数定义模式,文件执行步骤等等,但仍然跑不出,变量、算法、函数等程序设计语言的基本要素。
- 问题:脚本是什么意思?sh脚本与sh有什么区别?
- 解决: Shell是一种命令语言,shell script是使用一种特定的描述性语言,依据一定的格式编写的可执行文件。利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面。
- 问题:sh控制语句的代码掌握不到位
- 解决:https://blog.csdn.net/qq_43747991/article/details/115583638
标签:语句,脚本,变量,第十章,笔记,学习,命令,sh,参数 From: https://www.cnblogs.com/MRC-/p/16706065.html