[ Shell脚本和编程 | 青训营笔记 ]

87 阅读3分钟

课程准备

  • 一台安装了 linux 系统的物理机或者云主机
  • 可运行 shell 脚本
  • 本地的 vscode 安装 Bash Debug 插件,并升级 bash 到4.x以上
  • Npm 全局安装 zx 依赖

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Shell的基本概念

image.png

Shell 关键字

  1. echo:打印文字到屏幕
  2. exec:执行另一个 Shell 脚本
  3. read:读标准输入
  4. expr:对整数型变量进行算术运算
  5. test:用于测试变量是否相等、 是否为空、文件类型等
  6. exit:退出

Shell 变量

Shell 变量分为 3 种: 1. 用户自定义变量 2. 预定义变量 3. 环境变量 定义变量需要注意下面 2 点: 1. 等号前后不要有空格:NUM=10 2. 一般变量名用大写:M=1 使用 $VAR 调用变量:

echo $VAR1

shell 担任的工作

  1. 读取输入和语法分析命令列
  2. 对特殊字符求值
  3. 设立管线、转向、和幕后处理
  4. 处理讯号
  5. 设立程序来执行

Bash的历程

image.png

命令的语法

shell中特殊字符

特殊字符功能说明注意
#1.注释 2.声明命令解释器的类型 3.某些特定的模式匹配操作使用1.注释方面:一般是行首中以 #作为开头 2.声明解释器类型一般是在脚本第一行。使用格式:#!/bin/bash命令不能和注释在同一行上,也就是注释的后面
;命令分隔符,可以在同一行上写多个命令某些情况需要使用转义符转义
;;双分号,终止case选项
.bash内置命令1.点(.)放在文件名前面表示隐藏文件。 2.移动文件操作时,如果是单独点作为参数cp cxx/helloworld.sh .表示当前工作目录 3.两个点(..),表示上一级目录。 4.正则表达式中作为匹配任何的单个字符
" "双引号表示字符串
' '单引号表示字符
,逗号操作符链接一系列操作
\反斜杠()对单个字符的引用机制一般用来转义双引号(" ") 和单引号(' ')。
/正斜杠(/)1.作为文件名路径分隔符/data/cxx/Makefile 2.用作除法算术操作符
*1.乘法算术操作符 2.两个(**)表示求幂运算符 3.通配符,可以用来匹配给定目录下的任何文件名
?1.测试通配符 2.通配符,在正则表达式中表示一个字符,也可以用来匹配单个字符。在表达式中测试一个条件的结果,类似C语言中的三元操作符。
$1.引用变量 2.正则表达式中,表示行结束符。
${}参数替换
or* or @位置参数
$$进程ID变量保存所在脚本的进程ID
$?退出状态码变量可保存命令、函数或者脚本本身的退出状态码一般是0或 1。
{ }大括号,代码块,也叫作内部组。在函数或者判断语句中使用代码块在大括号中不允许有空白,除非空白被引用或者转义
[ ]1.测试条件 2.数组元素 3.字符范围作为字符范围时,方括号描述一个匹配的字符范围

&> >& >> < <> | 重定向

转义符

转义符是一种引用单个字符的方法。添加转义符(\) 使得shell中的某个字符失去原有特殊含义。

注意:在echo 和 sed 中谨慎使用转义符,否则会有相反效果。

赋值给变量的字符串的元素也会被转义, 但是不能把一个单独的转义符赋值给变量。

shell中参数

$0$?$!$$$*$#$@

字符符号功能(用途)
$0shell文件本身的文件名
11~n添加到Shell的各参数值。1是第1参数、1是第1参数、2是第2参数、…、$n表示第n个参数。⚠️注意:10以上要用大括号,如{10}。
$?最后运行命令的结束代码(返回值),执行成功返回0,不成功则返回非零值(一般解释为错误码)。
$$Shell本身的PID(ProcessID)
$!Shell最后运行的后台Process的PID
$-使用Set命令设定的Flag一览
$*所有参数列表。如 ""用「"」括起来的情况、以"*"用「"」括起来的情况、以"1 22 … n" 的形式输出所有参数。
$@所有参数列表。如 "@"用「"」括起来的情况、以"@"用「"」括起来的情况、以"1" "2""2" … "n" 的形式输出所有参数。
$#添加到Shell的参数个数

执行过程和原理