Shell脚本编程学习笔记(三)---- 条件测试
本文已参与[新人创作礼]活动,一起开启掘金创作之路。
Shell 条件测试
格式1:test 条件表达式
格式2:[ 条件表达式 ]
格式3:[ [ 条件表达式 ] ]
1.文件测试
[ -e dir|file ] 测试目录或者文件是否存在
[ -d dir ] 测试是否为目录
[ -f file ] 是否是文件
[ -r file ] 当前用户对该文件是否有读权限
[ -x file ] 测试文件是否有执行权限
[ -w file ] 测试当前用户是否有写入权限
例如
vi create_yum.sh
#!/bin/bash
#用于创建本地yum仓库的脚本
#挂载镜像文件
[ -d /opt/centos ] || mkdir /opt/centos
[ -d /opt/mitaka ] || mkdir /opt/mitaka
( 判断/opt/centos,mitaka目录是否存在,||表示逻辑或,若目录存在,则直接执行下一条命令,若不存在,执行后面的mkdir )
[ -e /root/CentOS-7-x86_64-DVD-1511.iso] && mount /root/CentOS-7-x86_64-DVD-1511.iso /opt/centos
[ -e /root/Mitaka.iso] && /root/Mitaka.iso /opt/mitaka/
( 判断/root/CentOS-7-x86_64-DVD-1511.iso,Mitaka.iso是否存在,&&表示逻辑且,若目录存在,执行后面的mount 若不存在,则直接执行下一条命令,)
#配置repo文件
cd /etc/yum.repos.d/
[ -d lod ] || mkdir lod
[ -f local.repo ] || touch local.repo
ls *.repo &> /dev/null
[ $? -eq 0 ] || mv *.repo lod
(判断上一条命令是否正确,等于0说明命令正确,直接执行下一条命令,若不等于0,执行后面的mv)
cat > local.repo << END
[centos]
name=centos
gpgcheck=0
enabled=1
baseurl=file:///opt/centos
[Mitaka]
name=mitaka
gpgcheck=0
enabled=1
baseurl=file:///opt/mitaka/Openstack-Mitaka
END
#清理并重建缓存
yum clean all &> /dev/null && yum makecache fast &> /dev/null
[ $? -eq 0 ] && echo "本地YUM仓库配置完毕,您可通过(yum list)等形式查看controller节点yum源安装是否完毕。"
sh create_yum.sh
2.数值比较
-eq: 等于(=)
-ne : 不等于(!=)
-gt : 大于(>)
-lt : 小于 (<)
-le : 小于或等于 (<=)
-ge : 大于或等于(>=)
例如
touch /tmp/disk_use.txt
vi disk_free.sh
#!/bin/bash
Disk_Free=$(df -h|grep "/$"|awk '{print $5}'|awk -F '%' '{prnt $1}')
if [ $Disk_Free -ge 80 ];then
echo "Disk Is Use:${Disk_Free}%" > /tmp/disk_use.txt
fi
在多条件的时,可以使用 -a 相当于and
例如
$num -ge 0 -a $num -le 10 #大于0,小于10
3.字符串比较
= 第一个字符串于第二字符串相同
!= 表示不相同,!示取反的意思
-z 检查字符串是否为空(zero) ,定义或赋予控制的变量,一般用于测试变量值
例如
批量创建用户,配置固定密码(20220522)
用户需要输入用户名,前缀即可
vi useradd.sh
#!/bin/bash
read -p "请输入用户名:" user #创建的用户个数
while true
do
if [[ ! $user =~ ^[0-9]+$ ]];then #匹配到不是数字的,就输出
echo "错误,请输入数字"
read -p "请输入用户名:" user
else
break
fi
done
read -p "请输入用户前缀:" pre
while true
do
if [[ $pre =~ ^[a-Z]+$ ]];then #匹配到的不是数字,就跳出循环
break
else
echo "错误,请输入拼音"
read -p "请输入用户前缀:" pre
fi
done
#批量创建用户,并设置统一密码
for i in $(seq $user);do
username=$pre$i
useradd $username &>/dev/null
echo "20220522"|passwd --stdin $username &>/dev/null
if [ $? -eq 0 ];then
echo "Create User is OK $username"
fi
done
sh useradd.sh
感谢大家,点赞,收藏,关注,评论!
浙公网安备 33010602011771号