一、知识点总结
1、sh脚本
sh脚本是一种文本文件,包含一系列sh语句,用于执行一系列命令。它是一种脚本语言,通常以.sh
为文件扩展名。脚本的执行需要使用shell解释器,比如Bash、csh、ksh等。脚本的基本结构如下:
#!/bin/bash
# This is a comment
echo "Hello, World!"
在这个示例中,#!/bin/bash
指定了解释器为Bash,echo
命令用于输出文本。脚本需要通过chmod +x script.sh
命令赋予执行权限,然后可以运行它。
2、sh脚本与C程序
sh脚本和C程序在语法和执行方式上有明显的不同。sh脚本是解释型语言,逐行执行,而C程序需要编译成机器码。C程序的变量需要声明类型,而sh脚本中的变量都是字符串。此外,sh脚本无需主函数(如C中的main
函数),脚本的入口点是第一个可执行语句。
3、命令行参数
sh脚本可以接受命令行参数,这些参数可以在脚本内部使用。例如,运行脚本时可以这样传递参数:
./myscript.sh arg1 arg2 arg3
在脚本内部,可以使用$0
表示脚本名称,$1
、$2
、$3
等表示命令行参数。还可以使用特殊变量$#
表示参数的数量,$*
表示所有参数,$$
表示当前脚本的进程ID,$?
表示上一个命令的退出状态。
4、sh变量
sh脚本中存在内置变量(如PATH
、HOME
、TERM
等),同时用户也可以自定义变量。变量在sh脚本中无需声明类型,它们都是字符串类型。如果一个变量未被赋值,那么它的值为空字符串。
5、sh中的引号
在sh脚本中,引号用于引用特殊字符。有三种主要类型的引号:单引号('
)、双引号("
)和反引号(反撇号,``)。
-
单引号:单引号内的字符会被视为字面值,不会进行任何替换。例如:
echo 'Hello $USER'
会输出文本Hello $USER
。 -
双引号:双引号内的变量会被替换为其值,同时允许转义字符的使用。例如:
echo "Hello $USER"
会输出文本Hello <当前用户>
。 -
反引号:反引号用于执行命令,并将其结果嵌入到字符串中。例如:
echo "Today is $(date)"
会输出当前日期。
6、sh语句
sh脚本中可以包含各种Unix/Linux命令,例如文件操作、文本处理、进程管理等。此外,还支持I/O重定向和管道操作,以及条件语句、循环结构和函数定义等高级语法。
7、命令
sh命令分为内置命令和外部Linux命令。内置命令由shell解释器执行,无需启动新的进程。一些常用的内置命令包括:
echo
:用于输出文本。cd
:用于改变当前工作目录。read
:用于从标准输入读取用户输入。export
:用于设置环境变量。if
:用于条件判断。for
:用于循环。while
:用于循环。function
:用于定义函数。
外部Linux命令是由独立的可执行文件组成的,它们可以在sh脚本中调用,比如ls
、grep
、sed
、awk
等。
8、命令替换
在sh脚本中,可以使用$()
或``(反引号)来执行命令,并将其结果作为字符串替换到脚本中。这可以用于动态生成命令或获取命令的输出。
current_date=$(date)
file_list=`ls /path/to/files`
9、控制命令
sh脚本支持多种控制语句,包括:
if-else-fi
:条件判断语句。for
:循环语句,用于迭代一个列表。while
:循环语句,用于根据条件重复执行命令。until-do
:与while
类似,但是在条件为假时执行命令块。case
:多分支条件语句,类似于switch-case
。continue
和break
:用于控制循环的执行流程。
10、I/O重定向
在sh脚本中,可以使用I/O重定向将输入、输出和错误流重定向到文件或其他地方。主要形式包括>
(覆盖)、>>
(追加)、<
(输入重定向)和<<
(嵌入文档)。
11、嵌入文档
嵌入文档是一种用于生成长文本块的技术,通过指定特定的关键字来结束文档输入。这通常用于创建配置文件或生成特定格式的文档。
12、sh函数
sh脚本可以定义函数,函数通过function
关键字定义,可以在脚本中的任何位置调用。函数可以接受参数,并可以有返回值。
13、sh中的通配符
通配符用于匹配文件名,包括:
- 星号
*
:匹配零个或多个字符。 - 问号
?
:匹配单个字符。 - 方括号
[]
:匹配方括号内的任何一个字符。
这些通配符在文件名匹配和模式匹配中非常有用。
14、命令分组
在sh脚本中,可以使用{}
或()
对一组命令进行分组。{}
将命令组合在一起,()
会在子进程中执行命令组。这些分组通常用于控制命令的执行环境或I/O重定向。
15、eval语句
eval
是一个内置命令,用于执行参数字符串中的命令,并将结果作为字符串返回。它通常用于动态生成命令并执行。
16、调试sh脚本
为了调试sh脚本,可以在执行时加上-x
选项,例如bash -x myscript.sh
,这将会显示每个命令的执行过程,帮助排查问题。此外,还可以使用set -x
和set +x
命令来在脚本中开启和关闭调试模式。
二、问题及解决
在下述实践中需要使用目录地址,由于其余目录内容很少,我选择使用主目录,但是主目录地址并不知道,查询chatgpt后成功解决。
三、ChatGpt提问
四、实践及代码托管
包含两个小实践
4.1
4.2
4.3
代码托管至gitee,链接:https://gitee.com/wang-yuxuan333/123.git
具体为10.txt文档