自学教材第10章,提交学习笔记(10分)
大家学习过Python,C,Java等语言,总结一下一门程序设计语言有哪些必备的要素和技能?这些要素和技能在shell脚本中是如果呈现出来的?
知识点归纳以及自己最有收获的内容 (3分)
问题与解决思路(2分)
实践内容与截图,代码链接(3分)
...(知识的结构化,知识的完整性等,提交markdown文档,使用openeuler系统等)(2分)
大家学习过Python,C,Java等语言,总结一下一门程序设计语言有哪些必备的要素和技能?这些要素和技能在shell脚本中是如果呈现出来的?
语法,语义,类库~~~这就是一门语言~
得到数据,处理数据,发出数据~~~这就是一个函数~
一门程序设计语言,作为语言,需要先掌握语法语义类库,并加上不同函数的组合,就能实现各种功能。数据结构和函数库的调用可以实现功能更加丰富,性能更加强大的程序。
shell脚本中变量均为字符串,经过选择、循环、函数的调用即可完成不同种功能。通过对本章节的学习,我认为将sh与c结合对比学起来效率更高,当然也需要对着示例亲手敲代码才能较牢固的掌握理解。
知识点归纳:
sh脚本
:一个包含sh语句的文本文件,命令解释程序sh要执行该语句。
sh
:一个解释程序,逐行读取sh脚本文件并直接执行这些行。变量类型:字符串。
命令行参数
$# = the number of command-line parameters $1 to $n
$* = ALL command-line parameters, including $0
In addition, sh also has the following built-in variables related to command executions.
$$ = PID of the process executing the sh
$? = last command execution exit status (0 if success, nonzero otherwise)
sh内置变量:PATH
、HOME
、TERM
变量设置与赋值示例:
特殊字符的打印:前面加 or ‘ ’
sh语句:包括所有Unix/Linux命令,以及可能的I/O重定向
常用的内置命令:
Read命令:当sh执行read命令时,它会等待来自stdin的输入行。
Linux命令:
-
echo命令:将参数字符串作为行回显到stdout。通常将相邻的多个空格压缩为一个空格。
-
expr命令:因为所有的sh变量都是字符串,所以我们不能直接把它们改为数值,可调用expr程序改变变量的<数值>
expr string1 op string2 -
管道命令:在sh脚本中经常使用管道作为过滤器
实用命令:
命令替换:echo $(cmd), $A会被替换成A的值
sh控制语句
if-else-fi:
for:
while:
until-do:
case:
continue:As in C, continue restarts the next iteration of the nearest loop and break exits the nearest loop. They work exactly the same as in C
通配符
file *:列出当前目录中所有文件的信息
ls *.c:列出当前目录中所有以.c结尾的文件
file ???:有3个字符的所有文件名
ls *.???:一个点号,后有两个字符的所有文件名
[]:查询文件名中一对[]中的字符
调试sh脚本则由带有-x选项的子sh运行
I/O重定向
当进入sh命令时,我们可以指示sh将I/O重定向到除默认stdin、stdout和sterr以外的文件。I/O重定向有以下形式和含义:
sh函数
func()
{
#function code
}
sh调试
sh脚本可由带有-x选项的子sh运行,以进行调试,如:
bash -x mysh
sh应用
sh脚本最常用于执行涉及冗长命令序列的常规作业。如:Linux安装包是用sh脚本编写的,安装过程中可与用户交互
脚本简化重复的工作
问题与解决思路:
设置断点时,将其设置在while循环中p==3的位置时候,出现function not defined 的情况
解决方法:gdb条件调试一般应用在循环、链表的遍历、或者其他变量的值可能被多次改变的场合。我在条件变量p的作用域外设置断点,这样会导致断点设置无效,应该对链表设置的值while p->next进行判断。