前言
shell脚本中的if-else功能对于shell程序员来说是一笔重要的财富。当您需要根据预定义条件执行一组语句时,它是最好的工具。
if-else 块即使不是条件编程中最重要的部分,也是其中之一。通过调节特定语句的执行,您不仅可以提高代码效率,还可以释放处理器可能浪费的宝贵时间,这些时间对于特定情况来说是不必要的。
1.if-else的基本语法
在Shell编程中,if-else语句用于根据条件执行不同的代码块。这种结构允许你在脚本中根据某个条件的真假来选择性地执行不同的命令或代码。一般来说,if语句的基本形式如下:
if [ 条件 ]; then # 如果条件为真执行的代码块 else # 如果条件为假执行的代码块 fi 结束
条件抒写格式
test
命令[ ]和[[ ]]
if test 条件; then # 条件满足时执行的代码块 fi # 或者 if [ 条件]; then # 条件满足时执行的代码块 fi if [[ 条件]]; then # 条件满足时执行的代码块 fi
注意事项
在使用[ ], [[ ]]时候 前面和后面都要空一格 不然会出现语法错误
比较运算符(数值)
运算符 | 含义 |
-eq |
等于 |
-ne |
不等于 |
-gt |
大于 |
-ge |
大于等于 |
-lt |
小于 |
-le |
小于等于 |
实例:
猜测用户输入的密码,是否满足长度。
vim passwd.sh #!/bin/bash read -p 'please your password:' ps if [ ${#ps} -lt 7 ] then echo "你输入的密码太短了" else echo "你的密码符号规定标准" fi
比较运算符(字符串)
运算符 | 含义 |
== |
等于 |
!= |
不等于 |
= |
等于(仅用于字符串比较) |
=~ |
正则匹配 |
实例:
升级装备
read -p "请问您要升级装备吗(yes/no)?" select if [ "$select" = "yes" ] then echo "恭喜您升级成功欢迎下次光临!" else echo "感谢你的光临!" fi
echo "欢迎来到猜输入游戏" read -p '请输入yes or on' ower if [ "$ower" != "yes" ] then echo "我猜您输入的no" else echo “我猜你输入的yes” fi ~
比较运算符(文件)
运算符 | 含义 |
-e |
文件存在 |
-f |
文件是普通文件 |
-d |
文件是目录 |
-s |
文件大小非零 |
实例:
检测目录是否存在 如果不存在自动创建 如果存在提示可以备份。
vim path.sh #!bin/bash read -p "请输入你想要创建的目录:" dir if test -d $dir then echo "$dir 以存在可以进行备份" else echo "$dir 不存已自动创建目录" mkdir $dir echo "$dir 以创建完成" fi chmod +x path.sh bash path.sh [root@localhost ~] bash path.sh 请输入你想要创建的目录:/csdn /csdn 不存已自动创建目录 /csdn 以创建完成 [root@localhost ~] bash path.sh 请输入你想要创建的目录:/csdn /csdn 以存在可以进行备份
逻辑运算符
运算符 | 含义 |
&& |
逻辑与(adn)只有当所有条件都为真时,才会执行后面的命令。 |
|| |
逻辑或(or) 只要有一个条件为真,就会执行后面的命令 |
测试
read -p "请输入您的密码:" pass if [ ${#pass} -ge 6 ] && [[ ${pass} =~ [a-z] ]] && [[ ${pass} =~ [A-Z] ]] && [[ ${pass} =~ [@!_] ]] then echo "您的密码符合规定 恭喜您设置成功" else echo "不符合规定标准 创建失败" fi 注意: 使用双方括号 [[ ]] 来进行正则表达式匹配。 修正了正则表达式的格式,用双引号括起来。
2.流程控制(重点)
单分支结构
测试:用户输入用户名 自动创建该用户 1条件
代码如下:
read -p "请输入创建的用户名:" name id $name &> /dev/null if [ $? -ne 0 ] then useradd $name echo "$name 用户已创建成功!"
双分支结构
测试:用户输入用户名 自动创建该用户 1条件
如果用户已存在则提示 条件2
代码如下:
read -p "请输入创建的用户名:" name id $name &> /dev/null if [ $? -ne 0 ] then useradd $name echo "$name 用户已创建成功!" else echo "$name 用户以存在" fi
多分支结构
根据不同的时间来输出 不同的问候
6-10 早上
11-13 中午
14-18 下午
其余 晚上
代码如下:
hour=`date +%H` # 获取当前小时数并赋值给变量hour if [ $hour -ge 6 -a $hour -le 10 ]; then echo "早上好!尊敬的$USER" elif [ $hour -ge 11 -a $hour -le 13 ];then echo "中午好!尊敬的 $USER" elif [ $hour -ge 14 -a $hour -le 18 ]; then echo "下午好!尊敬的 $USER" else echo "晚上好 尊敬的 $USER" fi
嵌套结构
代码如下:
#!/bin/bash #时间2024-3-5 14:57 #创作者CSDN神秘泣男子 #邀请用户输入需要创建的用户名 read -p "请输入需要创建的用户名:" user #判断用户名是否存在 if id $user &>/dev/null ;then echo "用户名已存在 " read -p "是否更新密码(yes/no)" update if [ "$update" = "yes" ];then read -p "请你重新为用户设置密码:" pass if [ ${#pass} -ge 6 ] ;then echo "用户($user)更新成功 密码为: $pass" echo $pass | passwd --stdin $user &>/dev/null else echo "密码不符合规定!自动退出" fi else echo "你已成功退出!" fi else echo "密码最小长度为6位" read -p "请为用户设置密码:" pass if [ ${#pass} -ge 6 ] ;then useradd $user echo "用户($user)创建成功 密码为: $pass" echo $pass | passwd --stdin $user &>/dev/null else echo "密码不符合规定!自动退出" fi fi