zoukankan      html  css  js  c++  java
  • 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. 暂时只想到这些
  • 相关阅读:
    【随笔浅谈】splay 时间复杂度简要分析
    【Luogu P4406】「CQOI2005」三角形面积并
    LLVM12.0.1,编译
    electrion 为了便于调试,打开控制台
    MySQL插入大量数据探讨
    【Django前后端部署】更新部署,不使用反向代理
    检测两台服务器某个目录下的文件一致性
    ceph-rbd和cephfs使用
    Laravel
    Scrcpy投屏神器--让你的电脑流畅操作手机
  • 原文地址:https://www.cnblogs.com/BillGreen/p/15335065.html
Copyright © 2011-2022 走看看