shell: 命令解释器 处于系统内核和用户之间负责解释命令行的
登录之后默认的shell程序是: /bin/bash
不同的shell内部指令,运行环境会有所区别

常见的shell: /bin/sh /bin/bash /sbin/nologin

#!/bin/bash 是指这个脚本是用/bin/bash来解释执行的
其中, #! 是一个特殊的表示符 后面,跟着解释此脚本的shell路径
除了第一行以外,脚本中所有的以#开头的行都是注释
#!/bin/bash 只能放在第一行,后面都要看成是注释
如果没有在脚本的第一行上加上#!+路径上这一行,那么脚本就会默认当前用户的shell为脚本解释器

bash只是shell中的一种,还有很多其他的shell

如果脚本没有执行权限,出现 Permission denied提示 就用 chmod 来赋予其执行权限
chmod 777 XXXX.sh

编写脚本的时候,每行一条linux命令,运行脚本的时候,命令就会按照顺序执行,
然后就赋予脚本文件可以执行的属性
执行脚本文件有三种命令方式
./XXX.sh
sh /XXXX.sh
source /XXXX.sh

完善的shell脚本应该包含
脚本声明,注释信息和可执行语句

重定向操作:

重定向输入: < 从指定文件读取而不是从键盘输入
重定向输出: > >> 将输出文件保存到指定文件 用来输出日志信息到指定文件中 会将原文件覆盖
标准错误输出 2> 2>> 将错误信息保存到指定的文件 保存错误日志信息
&> 将标准输出和标准错误的内容保存到同一个文件中
| 将左侧命令的输出结果,作为右侧命令的处理对象

shell变量是拥有者两层的意思
变量名: 使用固定的名称,是由用户定义或者系统预设的
变量值: 是可以根据用户的设置从而随着系统环境的变化而变化的

变量的类型: 自定义,环境, 位置, 预定义
其中位置变量就是通过命令行给脚本程序传递参数
预定义变量,是在BASH内置的一类变量,不能直接修改的

定义一个新的变量:
变量名 = 变量值
变量名会以字母或者下划线开头,区分大小写,建议全大写

查看变量的值 可以使用echo进行输出
echo $变量名
赋值时使用引号:
双引号,允许使用 $符引用其他变量值
单引号的话, 会禁止引用其他变量的值 $视为普通字符
反撇号: 命令替换, 提取命令执行之后的输出结果

将键盘输入内容为变量赋值
read [-p “提示信息”] 变量名

设置变量的作为范围:
export 变量名
export 变量名 = 变量值

加: + 减:- 乘: * 除 / 取余%

整数变量的运算:

条件测试:
测试某个表达式是否成立,当条件成立的时候,测试语句的返回值就是 0 否则为其他数值
test 条件表达式

判断字符串

test -n 判断字符串的长度非零
test -z 字符串的长度为零
test 字符串1 = 字符串2 字符串相等
test 字符串1 != 字符串2 字符串不等

判断整数

test 整数1 -eq 整数2 整数相等
test 整数1 -ge 整数2 整数1大于等于整数2
test 整数1 -gt 整数2 整数1大于整数2
test 整数1 -le 整数2 整数1小于等于整数2
test 整数1 -lt 整数2 整数1小于整数2
test 整数1 -ne 整数2 整数1不等于整数2

判断文件

test File1 -ef File2 两个文件都具有相同的设备号和节点号
test File1 -nt File2 文件1 比 文件2 新
test -d file 文件是存在的并且是目录
test -e file 文件存在
test -f file 文件存在并且是正规文件

test -z 进行测试的时候,字符串长度为0的时候,结果才会返回1
如果变量数值为0 返回为0
echo $? 标识对刚刚执行的表达式进行判断

对文件和目录进行判断的时候也可以写为[-e XXXX]
while 测试语句
do
命令行序列
done