shell脚本条件测试、正整数字符串比较与if、case语句
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
条件测试
三种测试方法
①test命令测试
②[ ]测试注意前后需要有空格
③[[ ]]加强版[ ]测试支持通配符和正则表达式
选项
-d测试是否为目录
-e测试目录或文件是否存在
-a测试目录或文件是否存在
-f测试是否为文件
-r测试当前用户是否有权限读取
-w测试当前用户是否有权限写入
-x测试当前用户是否有权限执行
-L: 测试是否为软连接文件
比较整数数值
-eq第一个数等于Equal第二个数
-ne第一个数不等于Not Equal第二个数
-gt第一个数大于Greater Than第二个数
-lt第一个数小于Lesser Than第二个数
-le第一个数小于或等于Lesser or Equal第二个数
-ge第一个数大于或等于Greater or Equal第二个数
字符串比较
选项
=字符串内容相同
!=字符串内容不同! 号表示相反的意思
-z字符串内容为空
-n: 字符是否存在
逻辑测试
格式1[ 表达式1 ] 操作符 [ 表达式2 ] ...
格式2命令1 操作符 命令2 ...
常见条件
-a或&&逻辑与“而且”的意思全真才为真
-o或||逻辑或“或者”的意思一真即为真
!逻辑否
脚本中常用命令
echo命令
echo命令:打印内容在窗口中
①echo -n 表示输出不换行
②echo -e 表示输出转义符
echo -e 配合转义符
\b 退格删除前一个字符。例如 echo -e "1234\b56" 则输出的是123564会被删除。
\c 抑制更多输出\c后的内容全部不输出。例如 echo -e "123\c456"则输出的是123。
\n 输出换行\n后的内容换行。例如 echo -e "123\n456 " 则输出123下一行输出456。
\t 相当于输出过程中按了一下tab键。
\f 输出换行但是光标位置不变。例如echo -e "123\f456"则输入123下一行开头空出123的位置然后再输出456
date命令
date命令查看时间显示格式为星期 月 日 时分秒 年
选项
+%F 输出格式年-月-日注意%在crontab定时中不能直接使用需要转义
+%T 输出格式时:分:秒 注意%在crontab定时中不能直接使用需要转义
cal命令
cal命令显示当月日历。
选项:
cal 12 显示本年整年日历
cal 某年 显示此年完整日历
tr命令
tr命令替换内容
基本格式tr 需要替换的内容 替换后的内容
例如: tr [a-z] [A-Z] 遇见小写字母全部转为大写字母
选项
-s 压缩功能。例如 tr -s aaa 输出a。
-d 删除功能。例如 tr -d abc 则输入123abc回车只会打印123。
-c 用字符串1中字符集的补集替换此字符集例如 cat /dev/random | tr -dc [[:alnum:]] | head -c 12。 /dev/random中是随机的字符内容 -dc 表示删除其他不需要内容 [[:alnum:]] 表示数字和字符 head -c 12 表示取前12个字符完整表达式意思为查看random文件并将非字符和数字内容删除然后取前12个字符常用于生成随机密码。
cut命令
cut命令提取想要的信息。
选项
-d 指定分隔符 例如 cut -d ":"指定:为分隔符。
-f 选择第几列 例如 cut -f3 取第三列-f1,3取第1列和第三列-f1-3取1-3列。
sort命令
sort命令排序
选项
-r 执行反方向由上至下整理
-n 按数字大小排序默认第一列默认按字母顺序
-t 指定分隔符
-k 指定列 例如 -k3
uniq命令
uniq命令去除连续的重复一般配合sort使用
-c 显示每个重复出现的次数
split 命令分隔大文件
-b 大小(例如1G) +要分隔文件名 加名称分隔指定名称但是后面的xaaxab不能指定只能指定x。
cat多行重定向
cat <<EOF
1
2
3
EOF
打印123到屏幕
if语句
分支结构
单分支
if 判断条件;
then 条件为真的分支代码
fi
例子
#!/bin/bash
if [ "$USER" != "root" ]
then
echo "非管理员用户无权限操作"
else
echo "是管理员用户"
fi
双分支
if 判断条件; then
条件为真的分支代码
else
条件为假的分支代码
fi
多分支
if 判断条件1
then
条件1为真的分支代码
elif 判断条件2
then
条件2为真的分支代码
elif 判断条件3;then
条件3为真的分支代码
...
else
以上条件都为假的分支代码
fi
例子
#!/bin/bash
read -p "请输入你的考试分数" grade
if [ $grade -ge 85 ]&& [ $grade -le 100 ]
then
echo "你的成绩为$grade"
echo "你的成绩为优秀"
elif [ $grade -ge 70 ]&&[ $grade -le 84 ]
then
echo "你的成绩为$grade"
echo "你的成绩为良好"
elif
[ $grade -ge 60 ]&&[ $grade -le 69 ]
then
echo "你的成绩为$grade"
echo "你的成绩为合格"
else
echo "你的成绩为$grade"
echo "你的成绩不合格"
fi
case
使用格式
case 变量引用 in
PAT1) 符合条件1执行分支1的命令PAT1可以使用通配符
分支1命令
每个分支结束的固定格式
PAT2) 符合条件1执行分支2的命令PAT2可以使用通配符
分支2命令
每个分支结束的固定格式可以有多个分支
* 不符合其他任意分支的默认分支
默认分支命令
分支结束的固定格式
esac case语句结束标志
#!/bin/bash
read -p "请输入你的分数" score
case $score in
100)
echo "$score 你太优秀了"
;;
[89][0-9])
echo "$score 表现不错"
;;
[67][0-9])
echo "$score 你及格了"
;;
[0-9]|[1-5][0-9])
echo "$score 你不及格"
;;
*)
echo "输入有误"
esac