Shell脚本_基本语法
一、判断基础
1.1 字符串比较
是否为空 [ -z 字符串]
等于 [ 字符串1 == 字符串2 ]
不等于 [ 字符串1 != 字符串2 ]
1.2 整数值比较
[ 整数值1 操作符 整数值2 ]
操作符 | 含义 |
---|---|
-eq | 等于 |
-ne | 不等于 |
-ge | 大于或等于 |
-le | 小于或等于 |
-gt | 大于 |
-lt | 小于 |
1.3 文件状态判断
[ 操作符 文件或目录 ]
操作符 | 含义 |
---|---|
-e | 判断对象是否存在(Exist) |
-d | 判断对象是否为目录(Directory) |
-f | 判断对象是否为一般文件(File) |
-r | 判断对象是否可读(Read) |
-w | 判断对象是否可写(Write) |
-x | 判断对象是否可执行(eXcute) |
1.4 组合多个命令
- 使用控制符组合多个命令
组合符号 | 作用 |
---|---|
; | 依次执行命令 |
&& | 前一条命令成功才执行下一条命令 |
|| | 前一条命令执行不成功才执行下一条命令 |
[ 判断1 ] && [ 判断2 ]
[ 判断1 ] || [ 判断2 ]
二、if 语句及case语句
2.1 if 单分支语法
- 当“条件成立”时执行命令序列,否则不执行任何操作
if 条件 if 条件;then
then 命令 或 命令
fi if
2.2 if多分支语法
- if语句针对多个条件分别执行不同的操作
if 条件1;then
命令1
elif 条件2;then
命令2
... ...
else
命令n
fi
2.3 case语句
- 用于判断变量的取值,类似于多分支的if语句,注意命令序列最后必须以分号结尾
case 变量 in
目标值1)
命令1;;
目标值2
命令2;;
.. ..
*)
默认命令
esac
三、循环语句
3.1 for语句
for 变量 in 值列表
do
命令序列
done
for ((初值;条件;步长))
do
命令序列
done
3.2 while语句
while 条件测试
do
命令序列
done
3.3 脚本中断与退出
- continue可以结束单次循环
- break可以结束循环体
- exit可以退出脚本
四、其他语法
4.1 函数
在shell环境中,将一些需要重复使用的操作,定义为公共的语句块,称为函数
function 函数名 {
命令序列
.. ..
}
函数名() {
命令序列
.. ..
}
调用函数时,通过函数名 值1 值2 可传递“位置参数”
函数名 & 可以让函数开启单独的进程执行
4.2 字串截取/替换/掐头/去尾
- 截取
${变量:起始位置:长度}
phone=123456789
echo ${phone} #统计变量长度 9
echo ${phone:0:3} 123
echo ${phone:4:-2} 4567
- 替换1个结果
${变量/旧字串/新字串} - 替换全部结果
${变量//旧字串/新字串} - 从左向右,最短匹配删除
${变量#关键字} - 从左向右,最长匹配删除
${变量##关键字} - 从右向左,最短匹配删除
${变量%关键字} - 从右向左,最长匹配删除
${变量%%关键字}
掐头/去尾不会改变变量原有值 - 变量初始化:变量有值,则返回该变量的值,无值则返回初始值
${变量:-关键词}
4.3 随机密码
- 使用命令生成随机密码:uuidgen 或 openssl
- 使用随机设备文件(/dev/random、/dev/urandom)
tr可以对数据进行替换、删除等操作 -c取反 -d删除
tr -cd '0-9a-zA-Z' < /dev/urandom | head -c 10
#删除随机数据中不是数字或大小写字母的数据,取前10个