第十章学习笔记

第十章学习笔记

〇、一门程序设计语言有哪些必备的要素和技能?这些要素和技能在shell脚本中是如果呈现出来的?

一门程序设计语言的必备要素和技能包括以下几个方面:

  1. 语法规则和语义:语言的基本语法结构以及语义规则,包括变量、函数、数据类型、运算符、表达式等的使用方法和含义。

  2. 控制流程:条件语句(如if-else语句)、循环语句(如for循环、while循环),以及跳转语句(如break、continue)等,实现程序的逻辑控制。

  3. 数据结构:常见的数据结构,如数组、列表、字典等用于组织和存储数据。

  4. 输入输出:读取用户输入和输出结果的方法,包括从命令行、文件或其他设备读取数据,以及向屏幕、文件或其他设备输出数据。

  5. 函数和模块:定义和调用函数,以及模块化代码的方法,程序分解为可重用的模块,提高代码的可维护性和扩展性。

在shell脚本中,这些要素和技能可以通过以下方式呈现出来:

  1. 语法规则和语义:编写脚本时需遵守shell脚本的基本语法规则,包括正确使用变量、命令、管道等,并理解它们的含义和作用。

  2. 控制流程:使用条件语句(如if-else语句)来根据条件执行不同的代码块,使用循环语句(如for循环、while循环)重复执行一段代码。

  3. 数据结构:在shell脚本中,可以使用数组来存储和处理一组数据,利用变量进行数据的临时存储和操作。

  4. 输入输出:通过读取命令行参数或者使用read命令获取用户的输入,将结果输出到终端或者文件中。

  5. 函数和模块:使用函数来封装可重用的代码块,并在需要时进行调用。同时,可以将一些常用的功能封装成脚本文件,供其他脚本引用和调用。

第十章sh编程

一、sh脚本

sh脚本是一个包含sh语句的文本文件,命令解释程序sh要执行该语句。
chmod+x mysh 使其可执行,第一行通常以#!组合开始,通常称为shebang。当主sh遇见shebang时,会读取脚本所针对的程序并调用该程序。
sh有许多不同版本

二、sh脚本与c程序

  1. 语法形式:

    • Shell脚本:以行为单位执行命令,可以直接调用系统命令和其他可执行文件。基本语法是将命令和参数放在一行中,使用空格或制表符分隔。Shell脚本通常以.sh为扩展名。
    • C程序:需要先编写源代码,然后通过编译器将其编译成可执行文件。C程序使用大括号将代码块括起来,并使用分号作为语句的结束符。
  2. 变量和数据类型:

    • Shell脚本:变量可以直接进行赋值,无需显式声明数据类型。Shell脚本中的变量一般是字符串类型(默认情况下),但也可以进行简单的数字运算和赋值。全局变量可以在脚本中共享。
    • C程序:变量需要显式声明,并指定其数据类型。C语言提供了多种数据类型,包括整数、浮点数、字符等基本数据类型,以及数组、结构体、指针等复合数据类型。
  3. 控制流程:

    • Shell脚本:使用条件语句(如if-else语句)、循环语句(如for循环、while循环)、跳转语句(如break、continue)等来控制程序的流程。条件判断和循环可以直接使用命令结果或变量值。
    • C程序:与Shell脚本类似,C语言也提供了条件语句、循环语句和跳转语句来控制程序的流程。但C语言的条件判断和循环必须使用布尔表达式或关系运算符进行判断。
  4. 函数和模块化:

    • Shell脚本:支持函数定义和调用,可以将一段可复用的代码封装成函数。函数可以在脚本中调用和传递参数。
    • C程序:使用函数对代码进行模块化和组织,可以将功能相似的代码封装成函数。C语言支持函数的参数传递和返回值。
  5. 输入输出:

    • 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语句):使用ifelifelse关键字,根据条件决定执行不同的代码块。
  • 循环语句(for循环、while循环):使用forwhile关键字,重复执行一段代码。
  • 分支语句(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改变生活

posted @ 2023-09-24 22:46  20211315邹雪梅  阅读(38)  评论(0编辑  收藏  举报