Linux中的shell脚本之流程控制循环遍历

3 条件判断

在这里插入图片描述

4 流程控制语句

1)if 语句

案例,用户输入用户名和密码,判断用户名是否是admin,密码是否是123,如果正确,则显示登录成功

首先我创建了shell文件,touch getpawer 其中getpawer 是我自己命的名

#!/bin/bash
read -p "请输入账号:" uname
n=$uname
read -p "请输入密码:" upwd
m=$upwd
if (("n"=="admin" && "m"=="123"))
then echo "登录成功"
else echo "登录失败"
fi

效果展示如下:

[root@localhost ~]# vi getpawer
[root@localhost ~]# sh getpawer
请输入账号:451
请输入密码:31031
登录失败
[root@localhost ~]# sh getpawer
请输入账号:admin
请输入密码:123
登录成功
[root@localhost ~]# admin
-bash: admin: command not found
[root@localhost ~]# sh getpawer
请输入账号:admin
请输入密码:321
登录失败

2)case语句:用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令

# 基础语法
case 变量 in1)
语句1 ;;2)
语句2 ;;
esac # 用于结束case语句,case反过来就是esac

案例,判断某个月份是多少天

#!/bin/bash
read -p "请输入要查询的月份:" month
echo "你要查询的月份是:$month月"
case $month in
1|3|4|7|8) echo "$month月有31天";;
4|6|9|11|12) echo "$month月有30天";;
2) echo "$month月有28天";;
esac

效果如下:

[root@localhost ~]# vi getday
[root@localhost ~]# sh getday
请输入要查询的月份:3
你要查询的月份是:3月
3月有31天

3)for循环

一个案例来了解语法,送出10次玫瑰花

#!/bin/bash
flowers=( "第1" "第2" "第3" "第4" "第5" "第6" "第7" "第8" "第9" "第10")
for n in ${flowers[*]}
do
echo "我喜欢你,这是我送你的第$n朵玫瑰花"
done

效果展示:

[root@localhost ~]# sh getflower
我喜欢你,这是我送你的第第1朵玫瑰花
我喜欢你,这是我送你的第第2朵玫瑰花
我喜欢你,这是我送你的第第3朵玫瑰花
我喜欢你,这是我送你的第第4朵玫瑰花
我喜欢你,这是我送你的第第5朵玫瑰花
我喜欢你,这是我送你的第第6朵玫瑰花
我喜欢你,这是我送你的第第7朵玫瑰花
我喜欢你,这是我送你的第第8朵玫瑰花
我喜欢你,这是我送你的第第9朵玫瑰花
我喜欢你,这是我送你的第第10朵玫瑰花

升级版:

#!/bin/bash
flowers=( "牡丹花" "玫瑰花" "桂花" "兰花" "梅花" "太阳花" "水仙花" "茉莉花" "小米花" "大红花")
sum=0
for i in ${flowers[*]} # 从数组中去出所有元素
do
sum=$(($sum+1))  
        echo "我喜欢你,送你的第$sum朵花是$i"
done

效果如下:

[root@localhost ~]# sh getflower1
我喜欢你,送你的第1朵花是牡丹花
我喜欢你,送你的第2朵花是玫瑰花
我喜欢你,送你的第3朵花是桂花
我喜欢你,送你的第4朵花是兰花
我喜欢你,送你的第5朵花是梅花
我喜欢你,送你的第6朵花是太阳花
我喜欢你,送你的第7朵花是水仙花
我喜欢你,送你的第8朵花是茉莉花
我喜欢你,送你的第9朵花是小米花
我喜欢你,送你的第10朵花是大红花

4)while 循环

语法:

​ while 循环条件

​ do

​ 循环语句

​ done

案例:输出10次为梦想而战

#!/bin/bash
i=1 # 循环参数从1开始
while(($i<=10)) # 只有i<=10的时候程序才会向下执行
do
i=$(($i+1))  # 每执行一次i的值就加一,是为了当i=11时就停止,也就实现了循环10次
echo "为梦想而战!!!"
done

效果如下:

[root@localhost ~]# sh shell1
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!

综合案例,用户输入自己的考试成绩,当成绩低于60,计算出距离60分的差距,并提示用户有2个选择,选择1是放弃,转专业,选择后弹出5句,别灰心,三百六十行行行出状元,当选择2时,是继续坚持备考下一次测试,并弹出5句,帅哥,你坚持的样子很酷,选择3时则提示,选择无效,请重新选择。当输入成绩大于60,则弹出,颁奖开始:第一个奖品本子是由蔡老师颁发,第二个本子是由王老师颁发…。

代码展示如下:

#!/bin/bash
read -p "请输入你的专业成绩:" grade
n=$grade
if (("$n"<"60"))
then
fs=$((60-$n))
echo "$fs"
echo "你的成绩是$n,离及格成绩60分还差$fs分"
echo "选择操作1:不再继续,我要转专业"
echo "选择操作2:我要继续战斗,下次考试一定及格"
read -p "请输入你的选择(1or2):" m
xz=$m
echo "你的选择是:$xz"
case $xz in
1) echo "你的选择是:不再继续,想要转专业,送你5句话"
i=1
while(($i<=5))
do
i=$(($i+1))
echo "别灰心,三百六十行,行行出状元"
done;;
2) echo "你的选择是:继续坚持备考下一次测试,送你5句话"
q=1
while(($q<=5))
do
q=$(($q+1))
echo "帅哥,你坚持的样子很酷!!!"
done;;
3) echo "选择无效,请重新选择"
esac
else
echo "专业成绩及格,现在由老师们给你颁发奖品:"
name=("蔡老师" "王老师" "刘老师" "李老师")
jiangli=("本子" "钢笔" "电脑" "鼠标")
lengh=${#name[@]}
for ((sum=1; sum <=$lengh ; sum++))
do
 echo "第$sum个奖励${jiangli[$sum-1]}是由${name[$sum-1]}颁发的"
done
fi

效果如下:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

阿里云数据库服务器价格表查询,一键查询报价

阿里云数据库服务器价格表&#xff0c;优惠99元一年起&#xff0c;ECS云服务器2核2G、3M固定带宽、40G ESSD Entry云盘&#xff0c;优惠价格99元一年&#xff1b;阿里云数据库MySQL版2核2G基础系列经济版99元1年、2核4GB 227.99元1年&#xff0c;云数据库PostgreSQL、SQL Serve…

C语言 | Leetcode C语言题解之第5题最长回文子串

题目&#xff1a; 题解&#xff1a; char* longestPalindrome(char* s) {int lenstrlen(s),max0;int p0;for(int i0;i<len;i)//这种是判断奇数回文{int lefti-1,righti1;//left左边&#xff0c;right右边while(left>0&&right<len&&s[left]s[right]){/…

P1102 A-B 数对 (非二分,不开龙永远的痛,用map解决)

可是我真的会伤心 题目链接 思路&#xff1a;1.本来想的是暴力&#xff0c;两层循环模拟每个数。 2.后来想先把每个数字的个数求出来放在数组nums【】中&#xff0c;并把不重复的数字存到数组b&#xff0c;再两层循环b数组应该时间复杂度会好些&#xff0c;如果b数组中的两个数…

【VUE】ruoyi框架自带页面可正常缓存,新页面缓存无效

ruoyi框架自带页面可正常缓存&#xff0c;新页面缓存无效 背景&#xff1a; 用若依框架进行开发时&#xff0c;发现ruoyi自带的页面缓存正常&#xff0c;而新开发的页面即使设置了缓存&#xff0c;当重新进入页面时依旧刷新了接口。 原因&#xff1a;页面name与 getRouters …

配置启动nacos,保姆级教程

下载nacos 下载链接 https://github.com/alibaba/nacos/releases进去下拉&#xff0c;找到下载版本信息。 下载后如图所示。 配置数据库 在我们的conf文件夹中有一个nacos-mysql的数据库文件 我们需要导入数据库&#xff0c;可通过工具Navicat等进行导入。 会有一下几张表…

【基础篇】1.6 开发环境搭建

写在前面 学习STM32的开发&#xff0c;我们需要选选择合适型号&#xff0c;STM32开发板。通过前面的博客&#xff0c;我们知道它通常包含了微控制器、外设接口和必要的电路组件。 在搭建STM32开发环境时&#xff0c;开发者需要首先安装选定的IDE&#xff08;如Keil MDK&#…

Unity类银河恶魔城学习记录12-2 p124 Character Stats UI源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_Statslot.cs using System.Collections; using System.Collections.Gen…

无极低码:免费版部署操作指南

无极低码 :https://wheart.cn 无极低码:免费试用版部署过程参照: 无极低码部署版操作指南 https://wheart.cn/so/home?m=index&id=ad614930-d936-11ee-8489-525400be6368 ” 。 下载完解压成后进行部署

C语言 分支控制——条件语句

目录 选择结构 单分支选择结构&#xff08;Single Selsction&#xff09; 双分支选择结构&#xff08;Double Selection&#xff09; 多分支选择结构&#xff08;Multiple Selsction&#xff09; 条件运算符和条件表达式 复合语句&#xff08;Compound Statement&#xff…

C++重载和模板

重载与模板 函数模板可以被另一个模板或一个普通非模板函数重载。 与往常一样&#xff0c;名字相同的函数必须具有不同数量或类型的参数。 如果涉及函数模板&#xff0c;则函数匹配规则会在以下几方面受到影响&#xff1a; 对于一个调用&#xff0c;其候选函数包括所有模板…

双机 Cartogtapher 建图文件配置

双机cartogtapher建图 最近在做硕士毕设的最后一个实验&#xff0c;其中涉及到多机建图&#xff0c;经过调研最终采用cartographer建图算法&#xff0c;其中配置多机建图的文件有些麻烦&#xff0c;特此博客以记录 非常感谢我的同门 ”叶少“ 山上的稻草人-CSDN博客的帮助&am…

计算机网络:数据链路层 - 点对点协议PPP

计算机网络&#xff1a;数据链路层 - 点对点协议PPP PPP协议的帧格式透明传输字节填充法零比特填充法 差错检测循环冗余校验 对于点对点链路&#xff0c;PPP协议是目前使用最广泛的数据链路层协议。比如说&#xff0c;当用户想要接入互联网&#xff0c;就需要通过因特网服务提供…

高分卫星助力台湾省花莲县地震应急救援

4月3日7时58分&#xff0c;在台湾省花莲县海域&#xff08;北纬23.81度&#xff0c;东经121.74度&#xff09;发生7.3级地震&#xff0c;震源深度12公里。接中国地震局地震预测研究所应急需求&#xff0c;国家航天局对地观测与数据中心&#xff08;以下简称“中心”&#xff09…

Kubernetes探索-Pod面试

本篇及此系列文章只针对面试相关问题做了简单总结&#xff0c;后续会出比较详细的系列文章.... 1. 创建Pod的底层逻辑 1&#xff09;创建单个Pod时&#xff1a;组件间的交互流程和描述如下图&#xff0c;该过程中controller-manager组件不工作。 流程描述 ① 客户端提交创建请…

揭开AI编程语言Mojo比Pyhon快6.8万倍的5个秘密!

最近&#xff08;2024年3月29日&#xff09;&#xff0c;号称比Python快6.8万倍的Mojo编程语言开源啦&#xff01;6.8万倍&#xff1f;你敢相信这个数字是真的吗&#xff1f;不过&#xff0c;就连Mojo官网都把这个结果贴了出来&#xff08;见下图&#xff09;&#xff0c;这就很…

怎样在Linux搭建NTP服务器

搭建 NTP&#xff08;Network Time Protocol&#xff09;服务器可以帮助你在局域网内提供时间同步服务&#xff0c;让网络中的设备都使用统一的时间。以下是在 Linux 系统上搭建 NTP 服务器的基本步骤&#xff1a; 安装 NTP 服务器软件&#xff1a; 在终端中执行以下命令安装 N…

Webpack部署本地服务器

Webpack部署本地服务器 目录 Webpack部署本地服务器目的认识模块热替换&#xff08;HMR&#xff09;什么是 HMRHMR 通过如下几种方式, 来提高开发的速度如何使用 HMRhost 配置 目的 完成自动编译 常用方式: webpack-dev-server webpack-dev-server 是一个用于开发环境的 Web 服…

Class类

1. Class类的理解 针对于编写好的 .java 源文件进行编译(使用 javac.exe)&#xff0c;会生成一个或多个 .class 字节码文件。接着&#xff0c;我们使用 java.exe 命令对指定的 .class 文件进行解释运行。这个解释运行的过程中&#xff0c;我们需要将 .class 字节码文件加载到内…

本地储存、jQuery

文章目录 1. 本地储存1. window.sessionStorage2. window.localStorage案例&#xff1a;记住用户名 2. jQuery入门jQuery 的概念jQuery 的入口函数jQuery 的顶级对象 $jQuery 对象和 DOM 对象 3. jQuery 常用API1. jQuery 选择器1.基础选择器2.层级选择器隐式迭代&#xff08;重…

C++(set和map详解,包含常用函数的分析)

set set是关联性容器 set的底层是在极端情况下都不会退化成单只的红黑树,也就是平衡树,本质是二叉搜索树. set的性质:set的key是不允许被修改的 使用set需要包含头文件 set<int> s;s.insert(1);s.insert(1);s.insert(1);s.insert(1);s.insert(2);s.insert(56);s.inser…