第十章学习笔记
第十章学习笔记
〇、一门程序设计语言有哪些必备的要素和技能?这些要素和技能在shell脚本中是如果呈现出来的?
一门程序设计语言的必备要素和技能包括以下几个方面:
-
语法规则和语义:语言的基本语法结构以及语义规则,包括变量、函数、数据类型、运算符、表达式等的使用方法和含义。
-
控制流程:条件语句(如if-else语句)、循环语句(如for循环、while循环),以及跳转语句(如break、continue)等,实现程序的逻辑控制。
-
数据结构:常见的数据结构,如数组、列表、字典等用于组织和存储数据。
-
输入输出:读取用户输入和输出结果的方法,包括从命令行、文件或其他设备读取数据,以及向屏幕、文件或其他设备输出数据。
-
函数和模块:定义和调用函数,以及模块化代码的方法,程序分解为可重用的模块,提高代码的可维护性和扩展性。
在shell脚本中,这些要素和技能可以通过以下方式呈现出来:
-
语法规则和语义:编写脚本时需遵守shell脚本的基本语法规则,包括正确使用变量、命令、管道等,并理解它们的含义和作用。
-
控制流程:使用条件语句(如if-else语句)来根据条件执行不同的代码块,使用循环语句(如for循环、while循环)重复执行一段代码。
-
数据结构:在shell脚本中,可以使用数组来存储和处理一组数据,利用变量进行数据的临时存储和操作。
-
输入输出:通过读取命令行参数或者使用read命令获取用户的输入,将结果输出到终端或者文件中。
-
函数和模块:使用函数来封装可重用的代码块,并在需要时进行调用。同时,可以将一些常用的功能封装成脚本文件,供其他脚本引用和调用。
第十章sh编程
一、sh脚本
sh脚本是一个包含sh语句的文本文件,命令解释程序sh要执行该语句。
chmod+x mysh 使其可执行,第一行通常以#!组合开始,通常称为shebang。当主sh遇见shebang时,会读取脚本所针对的程序并调用该程序。
sh有许多不同版本
二、sh脚本与c程序
-
语法形式:
- Shell脚本:以行为单位执行命令,可以直接调用系统命令和其他可执行文件。基本语法是将命令和参数放在一行中,使用空格或制表符分隔。Shell脚本通常以
.sh
为扩展名。 - C程序:需要先编写源代码,然后通过编译器将其编译成可执行文件。C程序使用大括号将代码块括起来,并使用分号作为语句的结束符。
- Shell脚本:以行为单位执行命令,可以直接调用系统命令和其他可执行文件。基本语法是将命令和参数放在一行中,使用空格或制表符分隔。Shell脚本通常以
-
变量和数据类型:
- Shell脚本:变量可以直接进行赋值,无需显式声明数据类型。Shell脚本中的变量一般是字符串类型(默认情况下),但也可以进行简单的数字运算和赋值。全局变量可以在脚本中共享。
- C程序:变量需要显式声明,并指定其数据类型。C语言提供了多种数据类型,包括整数、浮点数、字符等基本数据类型,以及数组、结构体、指针等复合数据类型。
-
控制流程:
- Shell脚本:使用条件语句(如if-else语句)、循环语句(如for循环、while循环)、跳转语句(如break、continue)等来控制程序的流程。条件判断和循环可以直接使用命令结果或变量值。
- C程序:与Shell脚本类似,C语言也提供了条件语句、循环语句和跳转语句来控制程序的流程。但C语言的条件判断和循环必须使用布尔表达式或关系运算符进行判断。
-
函数和模块化:
- Shell脚本:支持函数定义和调用,可以将一段可复用的代码封装成函数。函数可以在脚本中调用和传递参数。
- C程序:使用函数对代码进行模块化和组织,可以将功能相似的代码封装成函数。C语言支持函数的参数传递和返回值。
-
输入输出:
- Shell脚本:使用echo命令输出文本到终端,使用重定向符号(如>)将输出重定向到文件。使用read命令从用户那里获取输入。还可以使用管道符(|)将命令的输出作为另一个命令的输入。
- C程序:使用printf函数输出文本,使用scanf函数获取用户输入。C语言也支持文件操作,可以使用标准库函数进行文件读写。
三、命令行参数
命令行参数是指在执行一个程序时,在命令行中附加的一些额外信息,用于控制程序的运行。这些参数通常指定了程序应该如何运行或需要处理的数据。
在Linux和Unix系统中,命令行参数通常以以下格式提供:
command [option] [argument]
其中,command表示要运行的程序名称,option是程序的选项或标志,argument是程序需要处理的参数或数据。
例如,对于ls命令,常见的选项包括-l(显示详细信息)、-a(显示隐藏文件)、-h(使用人类可读的格式),而参数则可以是目录名或文件名等。
在Shell脚本和C程序中,可以通过获取命令行参数来进行相应操作。在Shell脚本中,命令行参数可以通过特殊变量$1、$2、$3等来获取,表示第1个、第2个、第3个参数,以此类推。$0表示当前脚本的名称。
四、sh变量
内置变量:PATH HOME TERM
用户可使用任何符号作为sh变量,不需要声明
所有sh变量都是字符串
未赋值的sh变量是NULL字符串
例:variable=string
如果A是一个变量,则$A是他的值
五、sh中的引号
sh 有许多特殊字符,如 $、/、*、>、<等。要想把它们用作普通字符,可使用\ 或者单引号来引用它们。
通常,用于引用单个字符。单引号用于引用长字符串。单引号内没有替换。双引号用于保留双引号字符串中的空格,但在双引号内会发生替换。
六、 sh 语句
sh 语句包括所有Unix/Linux命令,以及可能的I/O重定向
此外,sh编程语言还支持控制sh程行的测条件、循环、case等语句。
七、sh 命令
内置命令
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 的输入行。它将输人行划分为几个个标记,分配给列出的变量。read的一个常见用法是允许用户与正在执行的sh 进行交互。
在获得输人后,sh 可能会测试输人字符串,以决定下一步做什么。
替换。
Linux命令
sh可以执行所有的Linux命令。其中,有些命令几乎已经成为sh不可分割的一部分,因为它们广泛用于sh脚本中。
echo命令:echo只是将参数字符串作为行回显到 stdout。它通常将相邻的多个空格压维为一个空格,除非有引号。
expr命令:因为所有的sh量都是字符串,所以我们不能直接把它们改为数值。
管道命令:在sh脚本中经常使用管道命令作为过滤器
八、控制语句
- 条件语句(if-else语句):使用
if
、elif
和else
关键字,根据条件决定执行不同的代码块。 - 循环语句(for循环、while循环):使用
for
或while
关键字,重复执行一段代码。 - 分支语句(case语句):使用
case
关键字,根据变量的值进行多路选择。
示例:
# 条件语句
if [ $num -eq 0 ]; then
echo "Number is zero"
elif [ $num -gt 0 ]; then
echo "Number is positive"
else
echo "Number is negative"
fi
# for循环
for i in {1..5}; do
echo $i
done
# while循环
while [ $count -lt 10 ]; do
echo $count
((count++))
done
# case语句
case $option in
"A")
echo "Option A selected"
;;
"B")
echo "Option B selected"
;;
*)
echo "Invalid option"
;;
esac
九、I/O重定向:
- 标准输出重定向:使用
>
符号,将命令的标准输出重定向到文件中,如果文件不存在则创建,如果存在则覆盖原有内容。 - 追加重定向:使用
>>
符号,将命令的标准输出追加写入到文件中,如果文件不存在则创建。 - 标准错误重定向:使用
2>
符号,将命令的标准错误输出重定向到文件中。 - 合并输出重定向:使用
&>
符号,将命令的标准输出和标准错误输出同时重定向到文件中。
示例:
# 标准输出重定向
echo "Hello, World!" > output.txt
# 追加重定向
echo "Additional content" >> output.txt
# 标准错误重定向
command 2> error.txt
# 合并输出重定向
command &> output.txt
十、嵌入文档:
嵌入文档是一种在脚本中定义多行字符串的方法。可以使用<<
符号后跟一个特定的结束标记来表示嵌入文档的开始和结束。嵌入文档可用于存储多行文本或作为输入传递给其他命令。
示例:
# 嵌入文档作为多行字符串
message=$(cat << EOF
This is a multi-line
message.
EOF
)
echo "$message"
# 嵌入文档作为输入传递给命令
grep "pattern" << EOF
This is a sample text.
The pattern is matched here.
EOF
十一、Sh函数:
函数可以让你将若干条命令组织在一起,形成一个逻辑上的整体。Shell中定义函数的语法如下:
function_name () {
# 函数体
}
当需要调用函数时,只需使用函数名即可。函数可以返回值,语法如下:
function_name () {
# 函数体
return value
}
想要获取函数的返回值,可以使用shell内置变量$?
来获取。
十二、Sh中的通配符:
通配符是一种特殊字符,可以用于匹配文件名、目录等。在shell中常用的通配符有*
、?
和[]
。其中,*
匹配任意数量的任意字符(包括0个字符),?
匹配单个任意字符,[]
匹配指定范围内的任意字符。例如,*.txt
表示匹配所有以.txt
结尾的文件。
十三、命令分组:
命令分组是一种将多个命令组织在一起的方法,可以通过(命令)
或者{命令;}
实现。命令分组常用于控制命令的执行顺序或改变命令的执行环境。例如,(cd /path/to/dir && ls)
可以使ls
命令在/path/to/dir
目录下执行。
十四、eval语句:
eval语句可以将一个字符串作为Shell脚本来执行。通常用于动态生成Shell脚本。在使用eval时需要注意防止代码注入漏洞。
十五、调试Shell脚本:
Shell脚本调试可以通过使用set -x
开启调试模式,让Shell脚本在执行每条命令之前输出该命令的完整内容和所在行数。此外,还可以使用set -e
在脚本中任何一条命令出现错误时停止执行。同时,也可以使用echo
输出中间结果进行调试。
十六、Shell脚本的应用:
Shell脚本广泛应用于系统管理、自动化任务等领域。例如,可以使用Shell脚本定期备份数据库、清理无用文件、自动更新软件包等。此外,Shell脚本还可以用于编写各种工具脚本,如日志分析工具、部署脚本等。
苏格拉底挑战
sh控制语句
sh函数
问题与解决
针对书上描述并不详细的知识点,向GPT询问可以获得
GPT越来越让我们觉得,科技,AI改变生活