ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2021-09-25 18:32:35  阅读:118  来源: 互联网

标签:语句 10 变量 命令 Unix sh eval Linux 执行


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. 暂时只想到这些

标签:语句,10,变量,命令,Unix,sh,eval,Linux,执行
来源: https://www.cnblogs.com/BillGreen/p/15335065.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有