Unix/Linux系统编程第10章学习笔记

Unix/Linux系统编程第10章学习笔记

作者:20191322wyl

知识点总结与最有收获的内容

sh脚本

  • sh脚本使用chmod +x 文件名执行。(chmod可以赋予文件权限)
  • sh脚本中的行是可执行命令且为内置命令,那么sh可直接执行。否则,它会复制一个子进程来执行命令,并等待子进程终止后再继续,这与它执行单个命令行完全一样
  • sh中变量只有一个类型,就是字符串
  • sh不需要main函数,第一个可执行语句就是程序入口

命令行参数

  • 前十个,$0$9,之后的用$(10)$(n),n>10
  • $#=命令行参数$1到$n的数量
  • $*=所有命令行参数,包括$0
  • $S=执行sh的进程pid
  • $?=最后一个命令执行的退出状态(如果成功,则为0,否则为非0)

sh变量

  • sh变量不用声明,未赋值的sh变量为NULL字符串
  • 如果A是一个变量,则$A是变量A的值(未赋值情况下为NULL)
  • 使用“=”给变量赋值

sh中的引号

与转义字符“\”一样,加上后就没了特殊含义,就是一个普通字符串

sh语句

sh命令

内置命令

sh的内置命令由sh执行,不需要创建一个新的进程

read命令:read命令可以获取输入的字符串

Linux命令

sh可以执行所有的linux命令

  • echo命令:打印字符串,没有引号的情况下不管多少个空格都会压缩为一个空格

  • expr命令:

    一般的代码i=“i”+1是将i的值变成了“i+1”

    expr string1 OP string2,将string1和string2转换为数字再进行op操作,最后再转换为字符串

    例:expr $i + 1就实现了上面的操作

  • 管道命令

    使用管道命令作为过滤器

  • 实用命令

命令替换

当sh遇到“命令”或$(命令)时,会先执行命令,然后将执行结果字符串替换到$(命令)

sh控制语句

与C语言类似

if-else-fi语句(注意是fi)

每个语句必须在同一行上,但是如果多个语句之间用“;”隔开,则允许在同一行。

sh中,0为真,非0为假

if-elif-else-fi:与C语言中用法类似

for语句

while语句

until-do语句

类似于C语言中的do-until语句

case语句

在sh中很少使用

sh函数

sh函数的定义为

func()
{
	#function code
}

执行语句:func s1 s2 s3....sn

sh中的通配符

  • 星号通配符*:扩展到当前目录下的所有文件
  • ?通配符?:查询某文件名中的字符
  • []通配符:查询文件名中一对[]中的字符

命令分组

可使用{}或()对命令进行分组,在相同环境下执行同一组的命令

eval语句

eval [arg1 arg2....]

eval会先扫描需要执行的命令,将其中可替换的内容替换掉,再执行命令

问题

1

eval会替换命令的值,那如果我用eval运行cat file(某一个文件会怎么样)?

解答:

当我们把cat file直接赋予myfile变量后,我们直接echo myfile的内容将不会输出我们在file文件里面的文本。然后当我们用eval命令后,就会输出我们想要的内容。这时因为eval命令不但可以置换该变量,还能执行相应的命令。在第一次扫描中进行了变量置换,第二次扫描就执行了该变量所包含的字符串里面的cat file 命令,所以就输出了我们想要的内容。

总结程序设计语言有哪些必备的要素和技能

以下内容仅供参考

  1. 需要有基本的内置函数来实现于键盘以及屏幕的交互,就像printf与scanf一样
  2. 需要有基本的数据类型定义
  3. 需要有基本的程序结构语句,比如顺序结构、分支结构、条件结构等
  4. 需要有可以让用户自定义函数的语句
  5. 可以在命令行进行交互
  6. 暂时只想到这些
posted @ 2021-09-25 18:18  20191322  阅读(81)  评论(0编辑  收藏  举报