首页 > 其他分享 >学习笔记3

学习笔记3

时间:2023-09-24 14:11:07浏览次数:37  
标签:语句 变量 解释程序 笔记 学习 命令 sh 执行

第十章 sh编程

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

- 要素:

数据类型、常量、变量、运算符、表达式、标识符、关键字、数组、基本控制结构、函数、输入和输出、解释器和编译器

- 技能:

  1. 数据结构分析和设计
  2. 算法分析和设计
  3. 系统架构分析和设计

- shell脚本的呈现方式:

  1. 使用正规表示法,管道命令以及数据流重导向等功能
  2. 提供了数组,循环,条件以及逻辑判断功能,让使用者可以直接以shell来写程序。

2. 知识点归纳

(一)sh脚本

- sh脚本是一个包含sh语句的文本文件,命令解释程序sh要执行该语句。

shebang(#!)的一些具体用法:

  1. 如果脚本文件中没有#!这一行,那么执行时会默认采用当前Shell去解释这个脚本(即:$SHELL环境变量)。
  2. 如果#!之后的解释程序是一个可执行文件,那么执行这个脚本时,它就会把文件名及其参数一起作为参数传给那个解释程序去执行。
  3. 如果#!指定的解释程序没有可执行权限,则会报错“bad interpreter: Permission
    denied”。如果#!指定的解释程序不是一个可执行文件,那么指定的解释程序会被忽略,转而交给当前的SHELL去执行这个脚本。
  4. 如果#!指定的解释程序不存在,那么会报错“bad interpreter: No such file or directory”。注意:#!之后的解释程序,需要写其绝对路径(如:#!/bin/bash),它是不会自动到$PATH中寻找解释器的。
  5. 当然,如果你使用类似于”bash test.sh”这样的命令来执行脚本,那么#!这一行将会被忽略掉,解释器当然是用命令行中显式指定的bash。
  6. 脚本文件必须拥有可执行权限。

(二)sh脚本与C程序

- sh:

(1)sh是一个解释程序,逐行读取sh脚本文件并直接执行这些行。
(2)sh脚本中,每个变量都是字符串。
(3)sh脚本不需要main函数,第一个可执行语句是程序的入口点。

- C程序:

(1)C程序必须先编译链接到一个二进制可执行文件,然后通过主sh的子进程运行二进制可执行文件。
(2)在C程序中,每个变量必须有一个类型,例如char、int、float、派生类型(如struct)等。
(3)必须拥有一个main()函数,每个函数必须定义一个返回值类型和参数(如有)。

(三)echo

  • n:不要自动换行
  • e:若出现某个字符,特殊处理
  • \a:发出警告声
  • \c:不换行
  • \n:换行且光标移动到行首
  • \t:插入tab
  • -help:显示版本信息

(四)sh变量

sh有许多内置变量,如PATH、HOME TERM等。除了内置变量外,用户还可使用任何符号作为sh变量。不需要声明。所有的sh变量值都是字符串。未赋值的sh变量是NULL字符串。sh变量可用以下方法设置或赋值:“variable=string”如果A是一个变量,则$A是变量的值。

(五)sh中的引号

  • sh有许多特殊字符,如$、/、*、>、<等。要想把它们用作普通字符,可使用\或单引号来引用它们。
  • 通常,\用于引用单个字符。单引号用于引用长字符串。单引号内没有替换。双引号用于保留双引号字符串中的空格,但在双引号内会发生替换。

(六)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...]:在执行环境中设置变量
  • trap[arg][n]:接收到信号n后执行参数
  • umask[ddd]:将掩码设置为八进制数ddd的
  • wait[pid]:等待进程pid,如果没有给出pid,则等待所有活动子进程。
  • read命令:当sh执行read命令时,它会等待来自stdin的输人行。它将输入行划分为几个标记,分配给列出的变量。read的一个常见用法是允许用户与正在执行的sh进行交互。

- Linux命令

sh可以执行所有的Linux命令。其中,有些命令几乎已经成为sh不可分割的一部分,因为它们广泛用于sh脚本中。下文列出并解释了其中一些命令。
echo命令:echo只是将参数字符串作为行回显到stdout。它通常将相邻的多个空格压缩为一个空格,除非有引号。
expr命令:因为所有的sh变量都是字符串,所以我们不能直接把它们改为数值。
实用命令:除了上面的 Linux命令之外,sh还用许多其他实用程序作为命令。其中包括除了上面的Linux命令之外,sh还用许多其他实用程序作为命令。其中包括:

  • awk:数据处理程序
  • cmp:比较两个文件
  • comm:选择两个排序文件共有的行
  • grep:匹配一系列文件的模式
  • diff:找出两个文件的差异。
  • join:通过使用相同的键来连接记录以比较两个文件
  • sed:流或行编辑命令
  • sort:排序或合并文件
  • tail:打印某个文件的最后n行
  • tr:一对一字符翻译
  • uniq:从文件中删除连续重复行

(七)sh控制语句

sh是一种编程语言,支持许多执行控制语句,类似于c语言中的语句。

1. if-else-if语句

if-else-fi语句的语法是:
if [ condition ]
then
statements
else
statements
fi
每个语句必须在单独的一行上。但是,如果多个语句之间用分号分开,则sh允许多个语句在同一行.

2. for语句

for VARIABLE in string1 string2....stringr
do
commands
done
在每次迭代中,变量接受一个参数字符串值,并执行关键字do和done之间的命令。

3. while语句

while [ condition ]
do
commands
done
当条件为真时,sh将重复执行do-done关键字中的命令。预计条件会有变化,所以循环将在某个时间点退出。

4. until-do语句

until[ $ANS="give up"]
do
echo -n "enter your answer:"
read ANS
done
该语句类似于C语言中的do-until语句。

5. case语句

case $variable in
pattern1) command;;
pattern2) command;;
patternN) command;;
esac

6. continue和break语句

工作原理与C语言中完全相同。

(八)I/O重定向

当进入sh命令时,我们可以指示sh将I/O重定向到除默认stdin、stdout和sterr以外的文件。I/O重定向有以下形式和含义:
›file:stdout转向文件,如果文件不存在将会创建文件。
››file:stdout追加到文件。
<file:将文件用作stdin;文件必须存在并具有r权限。
<<word:从“here”文件中获取输人,直到只包含“word”的行。

3.苏格拉底挑战



标签:语句,变量,解释程序,笔记,学习,命令,sh,执行
From: https://www.cnblogs.com/hosf/p/17725927.html

相关文章

  • 《信息安全系统设计与实现》第三周学习笔记
    《信息安全系统设计与实现》第三周学习笔记第十章sh编程sh脚本sh脚本是一个包含sh语句的文本文件,命令行解释程序sh要执行该语句。例如创建一个文本文件mysh,包含:#!/bin/bash#commentlineechohello用chmod+xmysh使其可执行sh脚本与C程序sh是一个解释......
  • x86汇编学习
    sal为算术左移,保持符号位不变。shl为逻辑左移,为无符号左移,最高位直接被次高位覆盖。对应的右移分别为sar,shr。参考[https://blog.csdn.net/deniece1/article/details/](https://blog.csdn.net/deniece1/article/details/103274744#汇编语言中sal(算术左移指令)和shl(逻辑左移指......
  • Oracle process/session/cursor/tx/tm的简单学习
    Oracleprocess/session/cursor/tx/tm的简单学习Oracle的部署模式Oracle安装时有专用模式和共享模式的区别共享模式(Sharedmode):在共享模式下,会话可以同时读取数据库的数据,多个会话可以并发地进行读取操作。这意味着多个会话可以共享相同的数据快照,并且彼此之间不会阻塞。......
  • 学习笔记1
    知识点ubuntulinux的使用unix/linux常用命令ls:lsdirname:列出CWD或目录的内容cddirname:更改目录pwd:打印CWD的绝对路径名touchfilename:更改文件名时间戳(如果文件不存在,则创建文件)catfilename:显示文件内容cpsrcdest:复制文件mvsrcdest:移动或重命名......
  • 学习笔记2
    第九章I/O库函数一.知识点归纳(一)I/O库函数与系统调用系统调用函数:open()、read()、write()、lseek()、close()I/O库函数:fopen()、fread()、fwrite()、fseek()、fclose()二者区别:在系统调用程序中,文件描述符fd是一个整数。在库I/O程序中,fp是一个文件流指针。系统调用ope......
  • 高级系统架构师学习(八)嵌入式系统
    一、嵌入式系统概述基本概念1、将可配置与可裁剪的软硬件集成于一体的专用计算机系统,需要满足应用对功能、可靠性、成本、体积和功耗等方面的严格要求。2、指嵌入各种设备及应用产品内部的计算机系统。它主要完成信号控制的功能。体积小、结构紧凑,可作为一个部件埋藏于......
  • vue笔记
    一、vue项目vscode自动import,VUE组件和ts模块1、在vscode插件市场安装vetur插件2、修改tsconfig.json文件将moduleResolution改为node3、重启vscode,后面再下代码就可以自动import了。二、vue项目中使用elementplus参考elementplus官网:https://element-plus.org/zh-CN/guide/desig......
  • 【机器学习 | 分类指标大全】全面解析分类评估指标:从准确率到AUC,多分类问题也不在话下
    ......
  • 第三周学习笔记
    sh编程1.sh脚本Shell脚本是一种用于在Unix、Linux和其他类Unix系统上编写和执行命令序列的脚本语言。它使用Shell解释器(如sh、bash、csh等)来解释和执行脚本。Shell脚本可以包含一系列命令、控制结构、变量和函数,用于完成特定的任务或自动化一系列操作。通过编写Shell脚本,你可以......
  • 学习笔记3
    第十章教材知识点Shell脚本:Shell脚本是一系列Shell命令的集合,以文本文件的形式保存,并通过Shell解释器执行。Shell脚本的文件扩展名通常为.sh。Shell脚本的第一行指定解释器,例如#!/bin/sh表示使用sh解释器。命令行参数:在Shell脚本中,可以通过特殊变量$0、$1、$2等来获......