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

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

前言


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

相关文章
|
25天前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
68 1
|
11天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
35 2
6种方法打造出色的Shell脚本
|
2天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
13 2
|
16天前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
40 6
|
13天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
6月前
|
Shell Windows Perl
Shell编程中的条件判断与流程控制
Shell编程中的条件判断与流程控制
87 0
|
Shell
Shell编程:流程控制与高级应用的深入解析
Shell 流程控制 使用Shell编程时,流程控制是非常重要的,它允许你根据条件执行不同的命令或者控制程序的执行流程。Shell支持一些基本的流程控制结构,包括条件语句和循环语句。 1、条件语句 if语句 if [ 条件 ]; then # 如果条件为真执行的命令 elif [ 其他条件 ]; then # 如果其他条件为真执行的命令 else # 如果所有条件都不为真执行的命令 fi 示例: #!/bin/bash read -p "请输入一个数字: " num if [ $num -eq 0 ]; then echo "输入的数字是零" elif [ $n
88 1
|
Shell Perl
【Shell编程】Shell中的流程控制之if语句
【Shell编程】Shell中的流程控制之if语句
107 0
|
Shell 开发工具
shell编程之流程控制判断
一、shell判断-if 1.if判断基本概述 1.什么是if? If就是模仿人类的判断来进行的,但他没有人类那么有情感,只有True和false这两种结果。 2.为什么要使用if 当我们在写程序的时候,是否经常需要对上一步执行结果进行判断。那么判断就需要用if语句来实现。 3.if的基础语法 1.单分支语法 if [ $1 -eq $2];then echo “ok” fi 2.双分支结构 if [ $1 -eq $2 ];then echo “ok” else echo “error” fi 3.多分支结构###如果上面的匹配成功就不会继续向下匹配 if [ 如果你有房 ];then
180 0