首页 > 系统相关 >《Unix&Linux系统编程》第十章学习笔记

《Unix&Linux系统编程》第十章学习笔记

时间:2022-09-18 20:26:55浏览次数:79  
标签:语句 ... commands 脚本 编程 命令 Unix sh Linux

第10章 sh编程

10.1 sh脚本

​ sh脚本是一个包含sh语句的文本文件,命令解释程序sh要执行该语句。sh脚本的第一行通常以#!组合开始,成为shebang,当主sh见到shebang时,会读取脚本所针对的程序名并调用该程序。shebang允许主sh 调用适当版本的sh来执行脚本,如果未指定shebang,它将运行默认的sh。

10.2 sh脚本与C程序

​ sh是一个解释程序,逐行读取sh脚本并直接执行这些行,如果行是可执行命令且为内置命令,那么sh可以直接执行,否则它会复刻一个子进程来执行命令,并等待子进程终止后再继续。

​ 相反,C程序必须先编译链接到一个二进制可执行文件,然后通过主sh的子进程运行二进制可执行文件。其次,C程序中,每个变量必须有一个类型,而sh脚本中每个变量都是字符串。

10.3 命令行参数

  • 可以通过位置参数$0、$1、$2等访问命令行参数,前10个用$0$9,其他参数必须称为${10}${n}(n>10)。

  • $#=命令行参数$1到$n的数量

  • $*=所有命令行参数,包括$0

  • $S=执行sh的进程PID

  • $?=最后一个命令执行的退出状态(成功为0,否则为非0)

10.4 sh变量

  • sh有许多内置变量,如PATH、HOME、TERM等。
    除了内置变量外,用户还可使用任何符号作为sh变量,不许声明。未赋值的sh变量是NULL字符串,赋值方法如下:
variable=string  

10.5 sh中的引号

如果想把$、/、*、>、<等用作普通字符,可使用\或单引号来引用他们。
通常\用于引用单个字符,单引号用于引用长字符串。

10.7 sh命令

1、内置命令

命令 说明
.flie 读取并执行文件
break[n] 从最近的第n个嵌套循环中退出
cd[dirname] 更换目录
continue[n] 重启第n个嵌套循环
eval[arg...] 计算一次参数并让sh执行生成的命令
exec[arg...] 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,则等待所有活动子进程

2、Linux命令

echo命令:将参数字符串作为行回显到stdout,它通常将相邻的多个空格压缩为一个,除非有引号。
expr命令:间接更改sh变量的值(数量),它是一个程序,运行方式如下:

expr string1 OP string2 

管道命令:在sh脚本中经常使用管道作为过滤器。
实用命令:

  • awk:数据处理程序

  • cmp:比较两个文件

  • comm:选择两个排序文件共有的行

  • grep:匹配一系列文件的模式

  • diff:找出两个文件的差异

  • join:使用相同的键来记录以比较两个文件

  • sed:流或行编辑命令

  • sort:排序或合并

  • tail:打印某文件的最后n行

  • tr:一对一字符翻译

  • uniq:从文件中删除连续重复行

10.9 sh控制语句

1、if-else-fi语句

if [condition];then
  statements
else
  statements
fi

2、if-elif-else-fi复合语句

if [condition1];then
   commands
  elif [condition2];then
    commands
  else
    commands
fi

3、for语句

for VARIABLE in string1 string2 ... stringn
  do
    commands
  done

4、while语句

while [condition]
  do
    commands
  done

5、until-do语句

until [$ANS = "give up"]
  do
    echo -n "enter your answer:"
    read ANS
  done

6、case语句

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

7、continue语句和break语句

continue重启最近循环的下一个迭代,break退出最近循环

10.10 I/O重定向

形式 含义
>file stdout转向文件,若文件不存在则创建
>>file stdout追加到文件
<file 将文件用作stdin;文件必须存在并具有r权限
<<<word 从“here”文件中获取输入,直到只包含“word”的行

10.12 sh函数

func()
{
  #function code
}

10.13 sh中的通配符

  • 星号通配符

  • ?通配符

  • []通配符

10.14 命令分组

在sh脚本中,可以用{}或()对命令进行分组。

10.15 调试sh脚本

由带有-x选项的子sh运行

问题与解决思路

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

(1)要素:

  • 数据类型
  • 常量
  • 变量
  • 运算符
  • 表达式
  • 标识符
  • 关键字
  • 数组
  • 基本控制结构
  • 函数
  • 输入和输出
  • 解释器和编译器
    (2)技能:
  • 数据结构的分析和设计
  • 算法(即处理逻辑,微观层次)的分析和设计
  • 系统架构(即处理逻辑,宏观层次)的分析和设计
    (3)shell脚本:
  • 用正规表示法,管道命令以及数据流重导向等功能,以达到我们所想要的处理目的
  • 提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以shell来写程序,而不必使用类似C程序语言等传统程序编写的语法。

标签:语句,...,commands,脚本,编程,命令,Unix,sh,Linux
From: https://www.cnblogs.com/weihehahaha/p/16705631.html

相关文章

  • 轻松使用 Debian的Linux
    Spiral Linux 就是这样一种发行版,它源于Debian。它的重点在于促进简单性并为最终用户提供开箱即用的特性和功能。如果您是开源操作系统的新手,并且想熟悉一个易于使用......
  • linux mysql数据 解决ERROR 1045 (28000): Access denied for user 'root'@'localhost
    在linux系统是输入命令: mysql-uroot-p输入密码后 提示 ERROR1045(28000):Accessdeniedforuser'root'@'localhost'(usingpassword:YES):说明输入的密码是......
  • AOP切面编程思想 @RestControllerAdvice 实现处理统一的异常处理
    笔者注:@RestControllerAdvice比@ControllerAdvice多一个@Responsebody注解,即restful风格,方便内部method不用反复加@Responsebody注解另外,下面图片处无需再加@Component......
  • 01linux驱动学习--基本驱动框架
    一、确定主设备号(1)可以让内核自己分配Linux-5.4/include/linux/fs.hstaticinlineintregister_chrdev(unsignedintmajor, constchar*name, conststructfil......
  • 学习编程一
    大数字用BigInteger浮点数用BigdecimalString.valueof(a)//将a转换成字符串的形式,对题目进行存储+:add()-:subtract()*:multiply()/:divide()输出带有小数点*100.0.nextLine()/......
  • shell编程-发送消息
    需求:利用Linux自带的mesg和write工具,编写一个向用户快速发送消息的脚本,输入用户名作为第一个参数,消息内容为第二个参数。脚本需要检测用户是否登录,是否打开消息功能,......
  • shell编程-文件归档
    需求说明:设置定时任务,每天凌晨1点进行将指定目录(/root/scripts)下文件按照archive_目录名_年月日.tar.gz的格式归档存放到/root/archive路径下。1、编写脚本文件archive_s......
  • Linux:查看动态库/程序依赖的库
    objdump#查看依赖的库objdump-xxxx.so|grepNEEDED#查看可执行程序依赖的库objdump-x./testTime|grepNEEDEDreadelf(https://blog.csdn.net/yfldyxl/ar......
  • 《Unix/Linux系统编程》第十章读书笔记
    自学教材第10章学习笔记一、任务内容自学教材第10章,提交学习笔记(10分)大家学习过Python,C,Java等语言,总结一下一门程序设计语言有哪些必备的要素和技能?这些要素和技能在......
  • sh编程(第十章)
    目录相关链接程序设计语言shell脚本知识点归纳sh脚本与C如何编写sh问题与解决思路相关链接菜鸟教程-Shell教程——(快速入门)Shell变量Shell传递参数Shell数组......