一、编程语言总结
我之前学习过python、java、html、css等编程语言,根据我所学的知识和经验,我认为一门程序设计语言的必备要素和技能包括:
1. 语法:了解语言的基本语法规则和语法结构,包括变量、数据类型、运算符、控制结构、函数等。
2. 数据结构和算法:掌握常用的数据结构(如数组、链表、栈、队列、树、图等)和算法(如排序、查找、递归、动态规划等),能够灵活运用解决问题。
3. 编程范式:了解不同的编程范式(如面向对象编程、函数式编程、过程式编程等),并能够根据需求选择合适的范式进行编程。
4. 文件操作:能够读写文件、处理文件内容,包括文件的打开、读写、关闭等操作。
5. 异常处理:能够处理程序运行过程中可能出现的异常情况,保证程序的稳定性和可靠性。
6. 调试和测试:具备调试程序的能力,能够找出程序中的错误并进行修复,同时能够编写测试用例对程序进行测试。
而在shell脚本中,这些要素和技能可以通过以下方式呈现:
1. 语法:编写正确的shell脚本语法,包括变量的定义和使用、条件判断、循环控制等。
2. 命令行参数处理:能够接收和处理命令行参数,实现不同功能的脚本。
3. 文件操作:能够使用shell命令进行文件的读写、复制、移动等操作。
4. 流程控制:能够使用条件判断和循环控制结构实现程序的流程控制。
5. 函数和脚本模块化:能够将一段代码封装成函数或脚本模块,提高代码的复用性和可维护性。
6. 错误处理:能够处理脚本运行过程中可能出现的错误情况,包括错误信息的输出和异常处理。
二、学习归纳
1. sh脚本:sh脚本是一个包含sh语句的文本文件,命令行解释程序sh要执行该语句。所有sh程序基本上都执行相同的任务,但它们的脚本在语法上略有不同。
2.sh脚本与C程序:sh是一个解释性程序,逐行读取sh脚本文件并直接执行这些行,如果行是可执行命令且为内置命令,那么sh可直接执行,sh中每个变量都是字符串,因此不需要类型。而C程序必须先编译链接到一个二进制执行文件,然后通过主sh的子进程运行二进制可执行文件,且每个变量必须要有一个类型。
3.命令行参数:可以通过位置参数$0、$1、$2等访问命令行参数,可以用内置变量$#和$*计数并显示命令行参数。
$#=命令行参数$1到$n的数量
$*=所有命令行参数,包括$0
$S=执行sh的进程PID
4.sh变量
sh有许多内置变量,如PATH、HOME等,可以使用任何符号作为sh变量,所有的变量都是字符串,未赋值的sh变量是null字符串,可以通过命令行的形式设置赋值。
5.sh中的引号:使用\或单引号引用特殊字符
6.sh语句:包括所有Unix/Linux命令
7.sh命令:有.file读取并执行文件、break[n]从最近的第n个嵌套循环中退出、cd[dirname]更换目录的内置命令,echo命令、expr命令、管道命令、awk数据处理程序、cmp比较两个文件的实用命令等的Linux命令
8.命令替换:$A会被替换成A,当sh遇到‘cmd’或$(cmd),会执行cmd,然后用执行结果字符串替换$(cmd)
9.sh控制语句:有if-else-if语句、for语句、while语句、until-do语句、case语句、continue、break语句
10.I/O重定向:指示sh将I/O重定向到除默认stdin\stdout和sterr以外的文件
11.嵌入文档:输出命令从stdin获取输入,将其回显到stdout,直到遇到预先安排的关键字
12.sh函数:
定义为:
func()
{
# function code
}
13.sh中的通配符:
星号通配符:*,可扩展到当前目录的所有文件
?通配符:查询某文件名中的字符
[ ]通配符:查询文件名中一对[ ]中的字符
14.命令分组:用{}或()对命令进行分组
15.eval语句:通过参数替换、命令替换、通配符扩展执行
16.调试sh脚本:由带有-x选项的子sh运行
三、苏格拉底提问
四、实践
五、问题
不知道怎么运行sh脚本