shell概述
计算机系统:硬件->Linux内核->shell(做一个解释工作)->外层应用程序
shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。
常见的shell解释器:

编写最简单的shell脚本
先创建一个文件夹,在文件夹内创建一个shell脚本:

vim hello.sh开始进行编辑

执行shell脚本:bash 路径 / sh 路径

方法二:直接输入 绝对/相对路径,即可执行
查看当前文件权限,发现不可执行,要先修改文件权限

变成可执行文件:

相对路径执行脚本:

绝对路径执行脚本:

方法三:. 或者 source 脚本路径


shell中的变量
系统变量
常见的系统变量:$HOME(主目录),$PWD(工作目录),$SHELL(使用的解析器),$USER(当前用户)等。
查看系统某个变量:echo 系统变量

查看全部系统变量:env / printenv
查看所有变量(包括系统的全局变量和局部变量):set
自定义变量
用户自定义变量:变量名=变量值(注意等号前后不能有空格)

将自定义变量(局部变量)升级为全局变量:export 变量名
如图所示,自定义变量my_value在新打开的子shell中是查询不到的

升级为系统变量后在子shell中即可查询

定义只读变量:readonly 变量

删除自定义变量:unset 变量名

只读变量不能unset,关掉终端重新开启,变量就没有了。
特殊变量
$n:n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}
带参数的脚本:


测试特殊符号的使用


$#:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性。


$*,$@:
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)


$?:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。


运算符
基本运算的语法:$[运算表达式] / $((运算表达式))

编写一个简单的脚本程序

条件判断
基本使用语法:test 语句,若当前判断为true,会返回0,否则返回1;查看返回结果使用echo $?

判断方法二:[ 语句 ](注意判断语句前后要有空格)

字符串之间的等或不等直接用“=”或“!=”即可
整数之间的判断
-eq | 等于(equal) | -ne | 不等于(not equal) |
-lt | 小于(less than) | -le | 小于等于(less equal) |
-gt | 大于(greater than) | -ge | 大于等于(greater than) |

文件的判断
-r | 可读的权限 | -e | 文件存在 |
-w | 可写的权限 | -f | 文件存在且是一个一般文件(file) |
-x | 执行的权限 | -d | 文件存在且是一个目录 |


多条件判断:&& 和 ||
C语言中的问好表达式:a>b?a=1:b=2在shell中即可用下面形式实现:
[ a -gt b] && res=true || res=false


执行原理:&&表示前一条命令执行成功时,才会执行res=true,||表示上一条命令执行失败时,才执行res=false。