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

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/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 以创建完成"
fichmod +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`     # 获取当前小时数并赋值给变量hourif [ $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 ;thenecho "用户名已存在 "read -p "是否更新密码(yes/no)" updateif [ "$update" = "yes" ];thenread -p "请你重新为用户设置密码:" passif [ ${#pass} -ge 6 ] ;thenecho "用户($user)更新成功 密码为: $pass"echo $pass | passwd --stdin $user &>/dev/nullelseecho "密码不符合规定!自动退出"fielseecho "你已成功退出!"fi
elseecho "密码最小长度为6位"read -p "请为用户设置密码:" passif [ ${#pass} -ge 6 ] ;thenuseradd $userecho "用户($user)创建成功 密码为: $pass"echo $pass | passwd --stdin $user &>/dev/nullelseecho "密码不符合规定!自动退出"fi
fi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/723601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 缓存策略

MySQL 缓存方案用来干什么 ? 缓存用户定义的热点数据,用户直接从缓存中获取热点数据,降低数据的读写压力。场景分析 内存访问速度是磁盘访问速度的 10 万倍。读的需求远远大于写的需求MySQL 自身缓冲层跟业务无关。MySQL 作为项目主要数据库&#xff0…

Cookie 探秘:了解 Web 浏览器中的小甜饼

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

C++ 之LeetCode刷题记录(三十八)

😄😊😆😃😄😊😆😃 开始cpp刷题之旅。 目标:执行用时击败90%以上使用 C 的用户。 18. 四数之和 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target…

CRM是什么?SaaS是什么?CRM和SaaS有什么关系?

CRM是什么?SaaS是什么?CRM和SaaS有什么关系? 接下来,我们就来好好唠唠CRM和SaaS。 下文提到的一款典型SaaS CRM模版先放在这儿了,有需要的可以自取——https://www.jiandaoyun.com 先来波名词解释吧 CRM是什么&#…

基于springboot的场地预约小程序的设计与实现(程序+数据库+文档)

** 🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅** 目录 一、研…

《操作系统真相还原》读书笔记二:环境搭建 xshell连接virtualbox

修改 sshd_config 使用 vi /etc/ssh/sshd_config命令进入sshd服务配置,键盘输入i进行编辑,将监听端口、监听地址前的 # 号去除,开启允许远程登录,开启使用用户名密码来作为连接验证。修改完成,按一下Esc,输…

网络原理初识(1)

目录 一、网络发展史 1、独立模式 2、网络互联 3、局域网LAN 局域网组建的方式 1、基于网线直连 2、基于集线器组建 3、基于交换机组建 4、基于交换机和路由器组建 4、广域网WAN 二、网络通信基础 1、IP地址 2、端口号 3、认识协议 4、五元组 一、网络发展史 1、独立模式 …

Jmeter事务控制器聚合报告

Jmeter 事务控制器。 在Jmeter中,默认一个取样器就是一个事务事务控制器控制其子集取样器,合并为一个事务 添加:逻辑控制器/Logic Controller -> 事务控制器/Transaction Controller TPS: 服务器每秒处理的事务数在事务控制器下添加多个…

牛客网 华为机试 进制转换

本题是要将十六进制的字符串转换成十进制。看到题目第一眼就想到用map进行十六进制和十进制的映射。 然后我们需要注意,字符串前面会有0X,这只是一个标识十六进制的标识符,没有具体数字意义,我们在转换的时候,需要把它…

【视频转码】基于RK3588的视频转码探索

传统的视频转码服务基本都是基于X86下CPU、GPU转码,对硬件性能、功耗、成本来说都比较高。从技术角度来说现有视频转码技术有: 视频编码转变: 1. H.264 > H.265 保持视频分辨率、清晰度不变情况下,更改视频压缩方式&#xff0…

2024Java面试题知识点总结,一名毕业三年的女程序媛面试头条经验

程序员:给多少工资,干多少事 我们不是经常会看到一个关于西游记的“悖论”吗: 为什么孙悟空初期大闹天宫的时候那么厉害?因为他自己当老板,打一群天庭的打工仔。 为什么取经路上又变得不行了?作为一个打工…

牛客网 华为机试 取近似值

本题是要实现四舍五入。我们采用float的数据类型,因为这样数据精度更高。然后我们可以把得到的数据0.5,然后再转换成int数据类型,因为转换成int数据类型的时候是向下取整的,比如4.9转换成int就是4,4.2转换成int也是4。…

微服务笔记

什么是微服务? 微服务是一种经过良好架构设计的分布式架构方案,微服务架构特征: 1.单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业发。 2.面向服务:微服务对外暴露业务接口 3.自治:团…

ctf_show笔记篇(web入门---文件上传)

文件上传 151:简单的前端验证,有多种绕过方法 152:简单后端验证,不知道过滤了那些后缀,我尝试以后都可以上传 153:利用.user.ini文件,虽然能上传.pht这一类文件但访问时只会下载下来 这里就…

列表吸顶分组之按首字母分组国家选区号

列表粘性分组之按首字母分组国家选区号 Android原生版本 直接先看UI图,效果如下 本来看起来也不难,我就想着上面常用区号那块不动,下面的列表滑动就行,但IOS说他滑动的时候上面也滑上去了,好吧,这也行;但最终效果做出来后,IOS滑动后会有按照国家名称首字母进行粘性分…

低代码:数智化助力新农业发展

随着科技的飞速发展和数字化转型的深入推进,低代码开发平台正逐渐成为软件开发的热门话题。尤其在农业领域,低代码技术为传统农业注入了新的活力,助力新农业实现高效、智能的发展。 低代码开发平台的概念与特点 随着科技的飞速发展&#xff0…

基于springboot的精品在线试题库系统设计与实现(程序+数据库+文档)

** 🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅** 目录 一、研…

广东工行客户在手机银行上进行医保查询

现在的手机银行功能越来越多,对于一些不常用的功能,更是不知道该在哪里找到及访问,像医保查询,我原来就不知道怎么访问,问了别人才知道,特记录一下,以方便下次要访问时能找到。 1、从 手机银行…

考勤签到作业表单周期打卡评分小程序开发

表单考勤签到作业周期打卡评分小程序开源版开发 这是一款功能丰富的自定义表单统计小程序,涵盖信息填表、预约报名、签到打卡、活动通知、报名投票以及班级统计等多项功能。 高度灵活与自定义 该小程序为用户提供高度灵活的自定义表单系统。正文描述字段包含文本…

JSP语言基础(案例代码)

JSP基本语法 编写一个JSP页面&#xff0c;在该页面中显示当前时间 <% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8" import"java.util.*"%> <% page import"java.text.SimpleDateF…