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

学习笔记3

时间:2022-09-18 17:37:04浏览次数:98  
标签:语句 文件 脚本 2522% 笔记 学习 命令 sh

sh编程

总结

shell编程就是对一堆Linux命令的逻辑化处理。

sh脚本

  • sh脚本是一个包含sh语句的文本文件,命令行解释程序sh要执行该语句
  • sh脚本由三个sh函数组成的层次结构组成;cpf2f()将文件复制到文件,cpf2d()将文件复制到目录,cpd2d()递归复制目录
  • sh脚本的第一行通常以#!组合开始,通常称为shebang,当主sh见到shebang时,会读取脚本所针对的程序名并调用该程序。
  • 如果没指定shebang,他将运行默认的sh。

sh脚本与c语言程序

  • sh是脚本,是一个解释程序,而C语言却是能生成机器码的程序设计语言。
  • sh脚本中的第一个可执行语句是程序的入口点。
  • 如果行是可执行命令且为内置命令,那么sh可以直接执行。否则,他会复刻一个子进程来执行命令直到他终止。
  • C程序需要先编译链接到一个二进制可执行文件,之后通过主sh子进程运行二进制可执行文件。
  • C程序中的每一个变量必须有一个类型。
  • C程序需要有一个mian()函数作为入口点。

命令行参数

  • 可使用与运行sh命令完全相同的参数调用sh脚本
    mysh one two three。
    其中有:
    $#为命令行参数从$1到$n的数量。
    $*为所有命令参数。
    $S为执行sh命令的PID。
    $?为最后一个命令执行的退出状态。

sh变量

内置变量有PATH、HOME、TERM等,除此之外,用户还可使用任何符号作为sh变量,未赋值的sh变量是NULL字符串。

3sh符号

  • 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中读取一行并为变量赋值;
    shift:将位置参数$2 $3...重命名为$1 $2...;
    trap[arg][n]:接收信号n后执行参数;
    umask[ddd]:将掩码设置为八进制数ddd的;
    wait[pid]:等待进程pid,如果没有给出pid,则等待所有活动子进程。
  • read 命令:
    当 sh 执行 read 命令时,它会等待来自 stdin 的输入行。它将输人行划分为几个标记,分配给列出的变量。

linux命令

sh可以执行所有的linux命令

  • echo命令:echo只是将参数字符串作为行回显到stdout;
  • expr命令:因为所有的sh变量都是字符串,所以我们不能直接把它们改为数值;
  • 管道命令:在sh脚本中经常使用管道作为过滤器;
  • 实用命令:
    awk:数据处理程序;
    cmp:比较两个文件;
    comm:选择两个排序文件共有的行;
    grep:匹配一系列文件的模式;
    diff:找出两个文件的差异;
    join:通过使用相同的键来连接记录以比较两个文件;
    sed:流或行编辑命令;
    sort:排序或合并文件;
    tail:打印某个文件的最后n行;
    tr:一对一字符翻译;uniq:从文件中删除连续重复行。

sh控制语句

条件语句:

  statements
elif  [condition2];  then
  statements
else
  statements
fi

循环语句:
for语句:

  do
    commands
  done

每次循环,for都接受其后面的一个变量值。
while语句:

  do
    commands
  done

此外,还有continue/break语句,其用法和C语言类似,continue开始下一个迭代,break跳出循环。

I/O重定向

  • file stdout转向文件,如果文件不存在,将会创建文件

  • file stdout追加到文件

  • <file 将文件用作stdin;文件必须存在具有r权限
  • <<word 从“here”文件中获取输入,直到包含“word”的行

sh函数

sh的函数和C等高级语言的写法类似。函数必须在任何可执行语句之前定义,没有函数原型。

{
  # function code
} 

sh中的通配符

  • file *:列出当前目录中所有文件的信息
  • ls *.c:列出当前目录中所有以.c结尾的文件
  • ?通配符:查询某文件名中的字符
  • []通配符:查询文件名中一对[]中的字符
  • file [ab]:包含字符a或b的所有文件名
  • ls [xyz]:列出所有包含x、y或z的文件名
  • ls [a-m]:列出包含a到m范围内字符的所有文件名

命令分组:

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

eval语句

eval是sh的一个内置命令,将输入参数字符串连接到一个字符串中,计算一次,然后给出结果字符串

调试sh脚本

sh脚本可由带有-x选项的子sh运行,以进行调试

学习感悟

通过学习本章我对sh编程的强大能力有了很深的感悟,虽然不是学的很深,但我还是感受到了他解放双手的能力

参考博文

[MyBlog](https://blog.csdn.net/m0_52316372/article/details/125724052?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166349136816800182177090%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166349136816800182177090&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-2-125724052-null-null.142v47pc_rank_34_default_3,201v3control_2&utm_term=markdown%E8%AF%AD%E6%B3%95&spm=1018.2226.3001.4187)
[MyBlog](https://blog.csdn.net/luanpeng825485697/article/details/80387819?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166349179916800192223568%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166349179916800192223568&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-2-80387819-null-null.142v47pc_rank_34_default_3,201v3control_2&utm_term=sh%E7%BC%96%E7%A8%8B&spm=1018.2226.3001.4187)

标签:语句,文件,脚本,2522%,笔记,学习,命令,sh
From: https://www.cnblogs.com/1395372955jth/p/16705262.html

相关文章

  • 20201318李兴昕第十章学习笔记
    第十章:sh编程知识点归纳总结:本章讨论了sh编程,阐释了sh脚本和不同版本的sh。比较了sh脚本与C程序,并指出了解释语言和编译语言的区别;说明了如何编写sh脚本,包括sh变量,sh语句......
  • Rust 学习笔记
    学习资料rust程序语言英文:https://doc.rust-lang.org/book/title-page.html中文:https://kaisery.gitbooks.io/trpl-zh-cn/content/ch02-00-guessing-game-tutorial.ht......
  • markdown学习
    markdown学习标题三级标题四级标题字体Hello,World!Hello,World!Hello,World!Hello,World! Hello,World!引用选择狂神说java分割线 图片 超链接点击跳转到......
  • 2022-2023-1 20221313《计算机基础与程序设计》第三周学习总结
    班级的链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求的链接:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK03作业的目标:学习《计算机基础与程......
  • Go 学习(一) : Get started with Go
    安装gohttps://go.dev/doc/install安装以后命令行执行goversion然后随便创建一个文件,比如hello.gopackagemainimport"fmt"funcmain(){ fmt.Printl......
  • 操作系统学习笔记13 | 目录与文件系统
    本文完成磁盘管理4层抽象中的最后一层抽象:目录与文件系统。达成的效果是整个磁盘抽象为我们日常所熟悉的目录树,这个树应当能够适配不同的操作系统(是一个独立子系统),通过目......
  • canvas 学习笔记
    1.利用上下文对象进行绘制画笔varcanvas=canvas.getContext('2d')2.绘制路径canvas.rect(30,30,300,300)3.填充canvas.fillStyle('#ddd')canvas.fill()4描边canva......
  • 20201317-第10章学习笔记
    第十章shell编程程序设计语言必备的要素和技能程序设计语言的含义程序设计语言是用于书写计算机程序的语言。语言的基础是一组记号和一组规则。根据规则由记号构成的......
  • 学习编程一
    大数字用BigInteger浮点数用BigdecimalString.valueof(a)//将a转换成字符串的形式,对题目进行存储+:add()-:subtract()*:multiply()/:divide()输出带有小数点*100.0.nextLine()/......
  • 《C++ Primer Plus 学习笔记》目录
    本篇为随笔《C++PrimerPlus学习笔记》的目录第1章预备知识第2章开始学习C++第3章处理数据第4章复合类型第5章循环和表达式第6章分支语句和逻辑运算符第7章......