第10章学习笔记(20191213兰毅达)

发布时间:2022-07-05 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了第10章学习笔记(20191213兰毅达)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

第10章学习笔记 sh编程

10.1-10.2 这两个部分首先介绍了sh脚本和不同版本的sh,并把sh脚本和c语言进行比较。不难发现,sh脚本是解释程序,它会逐行读取sh脚本并直接执行,而C语言恰恰相反,它必须先编译链接,再通过主sh的子进程运行文件。除此之外,sh脚本中每一个变量都是字符串且不需要main函数,而C语言必须要有一个main函数,其变量也必须要有一个类型。 10.3-10.8 这部分主要说明如何编写sh脚本,包括命令行参数、sh变量、引号、sh语句、常规命令以及命令语句。

内置命令: .flie、break、cd、continue用法与Linux类似 eval:计算一次参数并让sh执行生成的命令 exec:使用这个sh执行命令,sh将会退出 export:将变量导出到随后执行的命令 set:在执行环境中设置变量 shift:将位置参数进行移动

Linux命令 echo命令:通常将相邻的多个空格压缩成一个空格,除非有引号 exPR命令:可将字符串转换为数字,进行操作后再转回字符串 管道命令:经常使用管道作为过滤器 实用命令: cmp:比较两个文件 conm:选择两个排序文件共有的行 diff:找出两个文件的差异 sort:排序或合并文件 tail:打印文件的最后n行 tr:一对一字符翻译 uniq:从文件中删除连续重复行

10.9 这部分介绍了sh的控制语句及其用法,包括if-else-fi、for、while、until-do、case以及continue和break语句。 if-else-fi语句和C语言中的if-else语句类似,但需要一个fi作为结束语句。 for、while、until-do语句也十分类似,但需要有do-done关键字

10.10-10.16 这部分主要是讲解如何编写sh函数以及如何使用参数调用sh函数。 由于sh逐行执行命令1,所以必须在任何可执行语句之前定义sh脚本中的所有函数。而在被调函数中,参数被引用为$0、$1到$n,其中通常$0是函数名,$1到$n是与命令行参数对应的位置参数。函数执行结束时,$?表示其退出状态,成功时状态为0,否则状态为非0

通配符 file *:列出当前目录中所有文件的信息 ls *.c:列出当前目录中所有以.c结尾的文件 file ???:有3个字符的所有文件名 ls *.???:一个点号,后有两个字符的所有文件名 []:查询文件名中一对[]中的字符

调试sh脚本则由带有-x选项的子sh运行

10.17-10.18 这部分主要是sh脚本的应用

最有收获的内容 shell就是一个包含若干行Shell或者Linux命令的文件。对于一次编写,多次使用的大量命令,就可以使用单独的文件保存下来,以便日后使用。通常shell脚本以.sh为后缀。在编写shell时,第一行一定要指明系统需要哪种shell解释用户的shell程序,如:#!/bin/sh,#!/bin/bash,#!/bin/csh,,#!/bin/tcsh和,#!/bin/ksh等。下面的run.sh则指明使用bash执行。

!bin/bash

ls -l 通常,shell脚本会以#!/bin/sh作为默认的shell程序。执行shell的方式有两种:第一种是为shell脚本加上可执行权限并执行,第二种是通过sh命令执行shell脚本,例如执行当前目录下的run.sh脚本,命令如下: //为shell脚本直接加上可执行权限并执行 chmod 755 run.sh ./run.sh //通过sh命令执行shell脚本

问题与解决思路

1、设置断点时想在while循环中p=3的位置设置断点,但出现function not defined 的情况 解决方法:GDB条件调试一般应用在循环、链表的遍历、或者其他变量的值可能被多次改变的场合。我在在条件变量p的作用域外设置断点,这样会导致断点设置无效,应该对链表设置的值while p->next进行判断,同时应该是==而不是=,导致一直在该断点。 2、shell编程路径是对的,可是执行之后,并没有返回上一层

!/bin/bash

pwd cd .. pwd 解决方法:执行:bash ./test1.sh 后的过程 :

  1. 当前进程会fork(),子进程调用exec,然后将#!后面的解释器bash程序的代码替换当前进程
  2. 上面解释器的代码已经替换了子进程,下来就是一一去处理文本中的命令
  3. 子进程再去fork(),让孙子进程去处理第一行的命令 将第一行命令作为参数传给解释器(当前的解释器就类似于"函数")
  4. 上面只是处理了一行的命令,如果还有命令行,再去fork() 上面的 cd.. 是在子bash中处理的,而对父bash没有影响,就出现了这种问题。

实践

第10章学习笔记(20191213兰毅达)

第10章学习笔记(20191213兰毅达)

脚本宝典总结

以上是脚本宝典为你收集整理的第10章学习笔记(20191213兰毅达)全部内容,希望文章能够帮你解决第10章学习笔记(20191213兰毅达)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。