第十章读书笔记

第十章读书笔记

sh脚本

  • sh脚本是一个包含sh语句的文本文件,命令解释程序sh要执行该语句,所有的sh基本都执行相同的任务,脚本在语法上略有不同,shebang允许允许主sh调用适当版本的sh来执行脚本。如果未指定shebang,默认执行sh,即下列程序的第一行。

例:创建一个一个文本文件mysh,包含:

#! /bin/bash //第一行通常以#!开始,通常称为shebang
# comment line
echo hello

  • 使用chmod +x mysh使其可执行。然后运行mysh。
  • 当主sh见到shebang时,读取脚本所针对的程序名并调用该程序。

sh脚本与C语言的区别

  • sh是一个解释程序,逐行读取sh脚本文件并直接执行这些行,如果行是可执行命令且为内置命令,那么sh可直接执行。否则,它会复制一个子进程来执行命令并等待子进程终止后再继续,这与它执行单个命令行完全一样。

    sh脚本中每个变量都是字符串;

    sh脚本不需要 main()函数。

  • C程序必须先编译链接到一个二进制可执行文件,然后通过sh子进程运行可执行的二进制文件。

    C程序中变量必须有一个类型。

    C语言必须有 main()函数。

命令行参数

  • $#=命令行参数$1到$n的数量
  • $*=所有命令行参数,包括$0
  • $S执行sh的进程PID
  • $?最后一个命令执行的退出状态

sh变量

  • sh内置变量:PATH、HOME、TEAM......
  • sh变量不用声明,未赋值的sh变量为NULL字符串
  • sh变量赋值方法:
    variable=string

sh中的引号

  • sh有许多特殊字符,如$、/、*、>、<,用作普通字符时:使用 \ 或者单引号来引用他们。

单双引号的区别

  • 双引号可以保留空格,且可以替换
  • 单引号内没有替换

sh命令

Linux命令

  • echo:将参数字符串作为行回显到stdout,通常将多个空格压缩为一个(除非有引号);
  • expr:用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串;
  • 管道命令:使用管道命令作为过滤器;
  • 其它实用命令:

命令替换

  • 当sh遇到'cmd'或$(cmd)时,会优先执行cmd,并用执行结果字符串替换$(cmd)。

sh控制语句

if-else-fi语句

  • 默认情况下if-else-fi语句是比较两个参数字符串,以确定条件是否为真。需要注意,在sh中0为TURE,非0为DALSE;

for语句

  • 变量每次迭代都接受一个参数字符串值,并执行do和done之间的命令;

while语句

  • 当条件为真时,重复执行do-done语句,当条件为假时就退出执行;

until-do语句

  • 当条件为真时就会退出循环;

case语句

  • 在sh中比较少用

continue 和 break 语句

  • continue重启最近循环的下一个迭代
  • break退出循环

I/O重定向

进入sh命令时,我们可以指示sh将I/O重定向到除默认stdin、stdout和sterr以外的文件。I/O重定向有以下形式和含义:

  • [>file stdout]转向文件,如果文件不存在,将会创建文件;
  • [>>file stdout]追加到文件;
  • [<file ]将文件用作stdin;文件必须存在具有r权限;
  • [<<word ]从“here”文件中获取输入,直到包含“word”的行。

sh函数

  • 定义为:
点击查看代码
func()
{
  # function code
}
- sh无法声明函数原型

sh中的通配符

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

命令分组

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

eval语句

eval [arg1 arg1 ...argn]

  • eval是sh的一个内置命令。由sh自己执行,不需要复制新进程。
posted @ 2022-09-15 18:07  给我个名字  阅读(16)  评论(0编辑  收藏  举报