小工具知识网

当前位置: 首页 > 行业知识 > shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)

行业知识

shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)

2026-11-06 17:23:43 来源:互联网转载

CSDN 成就一亿技术人!

作者主页:���击!

Shell编程专栏:点击!

CSDN 成就一亿技术人

前言————

shell脚本中的if-else功能对于shell程序员来说是一笔重要的财富。当您需要根据预定义条件执行一组语句时,它是最好的工具。

if-else 块即使不是条件编程中最重要的部分,也是其中之一。通过调节特定语句的执行,您不仅可以提高代码效率,还可以释放处理器可能浪费的宝贵时间,这些时间对于特定情况来说是不必要的。


目录

1.if-else的基本语法

注意事项

比较运算符(数值)

比较运算符(字符串)

​

比较运算符(文件)

逻辑运算符

2.流程控制(重点)

单分支结构

双分支结构

多分支结构

嵌套结构


1.if-else的基本语法

在Shell编程中,if-else语句用于根据条件执行不同的代码块。这种结构允许你在脚本中根据某个条件的真假来选择性地执行不同的命令或代码。一般来说,if语句的基本形式如下:

if [ 条件 ]; then    # 如果条件为真执行的代码块else    # 如果条件为假执行的代码块fi    结束

条件抒写格式

test命令[ ]和[[ ]]

if test 条件; then    # 条件满足时执行的代码块fi# 或者if [ 条件]; then    # 条件满足时执行的代码块fiif [[ 条件]]; then    # 条件满足时执行的代码块fi
注意事项

在使用[ ], [[ ]]时候 前面和后面都要空一格 不然会出现语法错误

比较运算符(数值)
运算符含义
-eq等于
-ne不等于
-gt大于
-ge大于等于
-lt小于
-le小于等于

实例:

猜测用户输入的密码,是否满足长度。

vim passwd.sh#!/bin/bashread -p 'please your password:' psif [ ${#ps} -lt 7 ]thenecho "你输入的密码太短了"elseecho "你的密码符号规定标准"fi
比较运算符(字符串)
运算符含义
==等于
!=不等于
=等于(仅用于字符串比较)
=~正则匹配

实例:

升级装备

read -p "请问您要升级装备吗(yes/no)?" selectif [ "$select" = "yes" ]thenecho "恭喜您升级成功欢迎下次光临!"elseecho    "感谢你的光临!"fi
echo "欢迎来到猜输入游戏"read -p '请输入yes or on' owerif [ "$ower" != "yes" ]thenecho "我猜您输入的no"elseecho “我猜你输入的yes”fi~     
比较运算符(文件)
运算符含义
-e文件存在
-f文件是普通文件
-d文件是目录
-s文件大小非零

实例:

检测目录是否存在 如果不存在自动创建 如果存在提示可以备份。

vim path.sh#!bin/bashread -p "请输入你想要创建的目录:" dirif test -d $dirthenecho "$dir 以存在可以进行备份"elseecho "$dir 不存已自动创建目录"mkdir $direcho "$dir 以创建完成"fi         chmod +x path.shbash path.sh[root@localhost ~] bash path.sh 请输入你想要创建的目录:/csdn/csdn 不存已自动创建目录/csdn 以创建完成[root@localhost ~] bash path.sh 请输入你想要创建的目录:/csdn/csdn 以存在可以进行备份
逻辑运算符
运算符含义
&& 逻辑与(adn)只有当所有条件都为真时,才会执行后面的命令。
||逻辑或(or)   只要有一个条件为真,就会执行后面的命令

测试

read -p "请输入您的密码:" passif [ ${#pass} -ge 6  ] && [[ ${pass} =~ [a-z] ]] && [[ ${pass} =~ [A-Z] ]] && [[ ${pass} =~ [@!_] ]]thenecho "您的密码符合规定 恭喜您设置成功"elseecho "不符合规定标准 创建失败"fi注意:使用双方括号 [[ ]] 来进行正则表达式匹配。修正了正则表达式的格式,用双引号括起来。

2.流程控制(重点)

单分支结构

测试:用户输入用户名 自动创建该用户 1条件

代码如下:

read -p "请输入创建的用户名:" nameid $name &> /dev/nullif [ $? -ne 0 ]thenuseradd $nameecho "$name 用户已创建成功!"
双分支结构

测试:用户输入用户名 自动创建该用户 1条件

如果用户已存在则提示 条件2

代码如下:

read -p "请输入创建的用户名:" nameid $name &> /dev/nullif [ $? -ne 0 ]thenuseradd $nameecho "$name 用户已创建成功!"elseecho "$name 用户以存在"fi
多分支结构

根据不同的时间来输出 不同的问候

6-10 早上

11-13 中午

14-18 下午

其余 晚上

代码如下:

hour=`date +%H`     # 获取当前小时数并赋值给变量hourif [ $hour -ge 6 -a $hour -le 10 ]; thenecho "早上好!尊敬的$USER"elif [ $hour -ge 11 -a $hour -le 13 ];thenecho "中午好!尊敬的 $USER"elif [ $hour -ge 14 -a $hour -le 18  ]; thenecho "下午好!尊敬的 $USER"elseecho "晚上好 尊敬的 $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 "你已成功退出!"        fielse        echo "密码最小长度为6位"        read -p "请为用户设置密码:" pass                if [ ${#pass} -ge 6 ] ;then                        useradd $user                        echo "用户($user)创建成功 密码为: $pass"                        echo $pass | passwd --stdin $user &>/dev/null                else                        echo "密码不符合规定!自动退出"                fifi

上一篇:怎么样启动服务器?

下一篇:服务器的屏保怎么设置?