Shell中的流程控制(if/case/for/while)

news2024/12/24 21:12:08

文章目录

  • Shell中的流程控制(if/case/for/while)
  • 1 if判断
    • 1.1 单分支
    • 1.2 多分支
  • 2. case语句
  • 3 for循环
    • 3.1 第一种写法 (())
    • 3.2 第二种写法 in
  • 4 while循环
    • 4.1 demo1
    • 4.2. demo2测试let

Shell中的流程控制(if/case/for/while)

在这里插入图片描述

1 if判断

1.1 单分支

1)第一种写法:

if [ 条件判断式 ];then

​ 程序

fi

2)第二种写法:

if [ 条件判断式 ]

then

​ 程序

fi

  • if后要有空格
  • [ 条件判断式 ],中括号和条件判断式之间必须有空格
[root@localhost home]# cd /home/jiaoben/; ls -l
总用量 16
-rw-r--r--. 1 root root  27 627 23:38 hello.sh
-rwxr-xr-x. 1 root root  52 628 22:05 parameter.sh
-rw-r--r--. 1 root root 450 629 00:03 para.sh
-rw-r--r--. 1 root root 323 629 23:58 sum.sh
[root@localhost jiaoben]# num=18
[root@localhost jiaoben]# if [ $num -gt 16 ]; then echo "$a大于16"; fi
25大于16
[root@localhost jiaoben]# num=15
[root@localhost jiaoben]# if [ $num -gt 16 ]; then echo "$a大于16"; fi
[root@localhost jiaoben]#
  1. 条件判断-a, -o

-a 相当于and

-o 相当于or

[root@localhost jiaoben]# num=25
[root@localhost jiaoben]# if [ $num -gt 20 ] && [ $num -lt 30 ]; then echo ok; fi
ok
[root@localhost jiaoben]# if [ $num -gt 20 -a $num -lt 30 ]; then echo ok; fi
ok
[root@localhost jiaoben]# if [ $num -lt 20 -o $num -gt 30 ]; then echo ok; fi
[root@localhost jiaoben]# num=40
[root@localhost jiaoben]# if [ $num -lt 20 -o $num -gt 30 ]; then echo ok; fi
ok
[root@localhost jiaoben]# num=18
[root@localhost jiaoben]# if [ $num -lt 20 -o $num -gt 30 ]; then echo ok; fi
ok

  1. 单分支脚本

if_demo1.sh

#!/bin/bash
if [ $1 = kevin ]
then
        echo "welcome, kevin"
fi

执行脚本:

[root@localhost jiaoben]# chmod +x if_demo1.sh
[root@localhost jiaoben]# ./if_demo1.sh kevin
welcome, kevin
[root@localhost jiaoben]#

1.2 多分支

if [ 条件判断式 ]

then

​ 程序

elif [ 条件判断式 ]

then

​ 程序

else

​ 程序

fi

  • if后要有空格
  • [ 条件判断式 ],中括号和条件判断式之间必须有空格

if_demo2.sh

#!/bin/bash
if [ $1 -ge 90 ]
then
        echo "成绩优秀"
elif [ $1 -ge 75 -a $1 -lt 90 ]
then
        echo "成绩良好"
elif [ $1 -ge 60 -a $1 -lt 75 ]
then
        echo "成绩及格"
else
        echo "成绩不及格"
fi

执行脚本:

[root@localhost jiaoben]# chmod +x if_demo2.sh
[root@localhost jiaoben]# ./if_demo2.sh 93
成绩优秀
[root@localhost jiaoben]# ./if_demo2.sh 80
成绩良好
[root@localhost jiaoben]# ./if_demo2.sh 62
成绩及格
[root@localhost jiaoben]# ./if_demo2.sh 58
成绩不及格

2. case语句

case语句写法:

case $变量名 in

“值 1”)

​ 如果变量的值等于值1,则执行程序1

;;

“值2”)

​ 如果变量的值等于值2,则执行程序2

;;

​ …省略其他分支

*)

​ 如果变量的值都不是以上的值,则执行此程序

;;

注意:

1)case行尾必须为单词“in”,没一个模式匹配必须以右括号“)”结束

2)双分号“;;”表示命令序列结束,相当于java中的break

3)最后“*)”表示默认模式,相当于java中的default

case_demo.sh

#!/bin/bash
case $1 in
java)
        echo "买了本Java的书籍"
;;
python)
        echo "买了本Python的书"
;;
golang)
        echo "买了本Golang的书"
;;
*)
        echo "================"
;;
esac

执行脚本case_demo.sh

[root@localhost jiaoben]# chmod +x case_demo.sh
[root@localhost jiaoben]# ./case_demo.sh java
买了本Java的书籍
[root@localhost jiaoben]# ./case_demo.sh golang
买了本Golang的书
[root@localhost jiaoben]# ./case_demo.sh php
================

3 for循环

3.1 第一种写法 (())

for (( 初始值;循环控制条件;变量变化 ))

do

​ 程序

done

for_demo1.sh

#!/bin/bash
for (( i=1; i<=$1; i++ ))
do
        sum=$[ $sum + $i ]
done
echo $sum

执行脚本:

[root@localhost jiaoben]# sh for_demo1.sh 100
5050

3.2 第二种写法 in

for 变量 in 值1 值2 值3…

do

​ 程序

done

  1. 命令行方式
[root@localhost jiaoben]# for book in Java Python Golang; do echo $book; done
Java
Python
Golang
[root@localhost jiaoben]# for i in {1..100}; do sum=$[$sum+$i]; done; echo $sum
5050
[root@localhost jiaoben]#
  1. 脚本

for_demo2.sh

#!/bin/bash
for num in $*
do
        echo $num
done

执行脚本:

[root@localhost jiaoben]# sh for_demo2.sh 1 2 3 4 5 6 7 8
1
2
3
4
5
6
7
8
  1. 测试 ∗ 和 *和 @的区别

双引号包含时,$*会将所有的参数作为一个整体,以$1 $2 $3 … n 的形式列出所有参数; n的形式列出所有参数; n的形式列出所有参数;@会将各个参数分开

for_demo3.sh

#!/bin/bash
echo '================$*================='
for lanague in $*
do
        echo $lanague
done

echo '================$@================='
for lanague in $@
do
        echo $lanague
done

执行脚本:

[root@localhost jiaoben]# ll | grep for_demo3.sh
-rw-r--r--. 1 root root 181 71 23:20 for_demo3.sh
[root@localhost jiaoben]# chmod u+x for_demo3.sh
[root@localhost jiaoben]# ll | grep for_demo3.sh
-rwxr--r--. 1 root root 181 71 23:20 for_demo3.sh
[root@localhost jiaoben]# ./for_demo3.sh Java Python Golang Sql
================$*=================
Java
Python
Golang
Sql
================$@=================
Java
Python
Golang
Sql

修改脚本for_demo3.sh

#!/bin/bash
echo '================$*================='
for lanague in "$*"
do
        echo $lanague
done

echo '================$@================='
for lanague in "$@"
do
        echo $lanague
done

执行脚本:

[root@localhost jiaoben]# ./for_demo3.sh Java Python Golang Sql
================$*=================
Java Python Golang Sql
================$@=================
Java
Python
Golang
Sql

4 while循环

while [ 条件判断式 ]

do

​ 程序

done

4.1 demo1

while_demo.sh

#!/bin/bash
num=1
while [ $num -le $1 ]
do
        sum=$[ $sum + $num]
        num=$[$num + 1]
done
echo $sum

执行脚本:

[root@localhost jiaoben]# sh while_demo.sh 100
5050

4.2. demo2测试let

修改while_demo.sh

#!/bin/bash
num=1
while [ $num -le $1 ]
do
        let sum+=num
        let num++
done
echo $sum

执行脚本:

[root@localhost jiaoben]# sh while_demo.sh 100
5050

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

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

相关文章

【C】操作符详解

操作符 算术操作符移位操作符位操作符赋值操作符&#xff08;&#xff09;复合赋值操作符 单目操作符关系操作符逻辑操作符逗号表达式条件操作符下标引用&#xff0c;函数调用和结构成员 今天给大家带来一篇关于C语言操作符的详细介绍&#xff0c;在C语言中操作符主要有以下几种…

VS工程加载失败 | 找不到导入的项目CUDA xx.props解决方案

问题背景&#xff1a; 如果遇到VS项目某些工程无法加载&#xff0c;有一个可能的原因是属性表没有找到。即props文件无法加载&#xff0c;导致项目加载失败。 解决方案&#xff1a; 找到工程配置 .vcxproj 文件&#xff0c;编辑打开&#xff0c;查找props&#xff0c;发现电脑…

07_Linux并发与竞争

目录 Linux并发与竞争Linux并发与竞争 并发与竞争 保护内容是什么 原子操作简介 原子整形操作API函数 原子位操作API函数 自旋锁简介 自旋锁API函数 信号量简介 信号量API 函数 互斥体简介 互斥体API函数 Linux并发与竞争Linux并发与竞争 Linux是一个多任务操作系…

SQL-每日一题【178.分数排名】

题目 表: Scores 编写 SQL 查询对分数进行排序。排名按以下规则计算: 分数应按从高到低排列。 如果两个分数相等&#xff0c;那么两个分数的排名应该相同。 在排名相同的分数后&#xff0c;排名数应该是下一个连续的整数。换句话说&#xff0c;排名之间不应该有空缺的数字。 …

Redis安装配置及常用redis命令

目录 一、关系型数据库与非关系型数据库 1.关系型数据库 2. 非关系型数据库 3. 关系型数据库和非关系型数据库区别 3.1数据存储方式不同 3.2扩展方式不同 3.3对事务性的支持不同 4.非关系型数据库产生背景 5.总结 二、Redis简介 1.redis的工作过程 ​编辑 2.Redis…

chatgpt赋能python:如何用Python快速找到你需要的资料

如何用Python快速找到你需要的资料 在互联网时代&#xff0c;人们每天都需要浏览大量的信息来获取所需的资源和知识。但是在海量信息面前&#xff0c;如何快速准确地获取你想要的资料呢&#xff1f;这就要依靠搜索引擎了。而Python作为一门通用编程语言&#xff0c;也可以在搜…

路由基础静态路由

路由基础&静态路由 一、路由器基本原理1.1、路由器基本概述1.2、LAN和广播域1.3、路由选路1.3.1、路由器转发数据包1.3.2、IP路由表1.3.3、建立路由表1.3.4、最长匹配原则1.3.5、路由优先级1.3.6、路由度量1.3.7、等价路由 1.4、总结 二、静态路由基础2.1、静态路由配置2.2…

【C++】 Qt-事件(上)(事件、重写事件、事件分发)

文章目录 事件重写事件事件分发 事件 事件&#xff08;event&#xff09;是由系统或Qt本身在不同的时刻发出的。比如&#xff0c;当用户按下鼠标&#xff0c;敲下键盘&#xff0c;或窗口需要重新绘制的时候&#xff0c;都会发出一个相应的事件。一些事件是在对用户操作做出响应…

【记录】OLAP引擎中的冷热分层技术

在数据分析的实际场景中&#xff0c;冷热数据往往面临着不同的查询频次及响应速度要求。例如在电商订单场景中&#xff0c;用户经常访问近 6 个月的订单&#xff0c;时间较久远的订单访问次数非常少&#xff1b;在行为分析场景中&#xff0c;需支持近期流量数据的高频查询且时效…

Airtest:Windows桌面应用自动化测试四【Airtest之python本地环境安装、独立IDE运行】

Airtest之python本地环境安装、独立IDE运行 一、环境配置二、安装Airtest三、安装poco四、常见问题4.1若运行代码时&#xff0c;在cv2模块报ImportError: DLL load failed: 找不到指定模块的错&#xff0c;有几种解决方案&#xff1a;4.1.1.本问题的根本原因应该是DLL文件的缺失…

如何在前端写播放音频

ml(html文档、wxml文档等) <audio action{{action}} src"http://music.163.com/song/media/outer/url?id2059780541.mp3"></audio> js文档 action:{"method":"play"}

6.19、一起学JAVA API Object String StringBuffer/StringBuilder

1 前言 亲爱的小伙伴萌,目前我们看到的是Java基础部分的一个新的部分API,这是个啥,又能做啥呢? 其实可以概括成一句话:帮助我们站在巨人的肩膀上,实现更加高效的开发,那么我们来一探究竟吧~ 2 什么是API API&#xff08;Application Programming Interface&#xff0c;应用…

软考A计划-系统集成项目管理工程师-项目概念-上

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

《操作系统》by李治军 | 实验9 - proc文件系统的实现

目录 一、实验目的 二、实验内容 三、实验准备 1. procfs 简介 2. 基本思路 四、实验过程 1. 增加新的文件类型 2. 让 mknod() 支持新的文件类型 &#xff08;1&#xff09;修改 mknod 系统调用 &#xff08;2&#xff09;初始化 procfs 3. 让 proc 文件可读 &…

H5学习(三)-- CSS层叠样式表

文章目录 一、简介二、CSS的书写样式1. 行内样式&#xff08;内联样式&#xff09;2. 页内样式3. 外部样式 三、常见的选择器1. 标签选择器2. 类选择器3. id选择器4. 并列选择器5. 复合选择器6. 伪类选择器 一、简介 CSS&#xff08;cascading style sheet&#xff09;是层叠样…

springboot+echarts +mysql制作数据可视化大屏(六图)

作者水平低&#xff0c;如有错误&#xff0c;恳请指正&#xff01;谢谢&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 项目简单&#xff0c;适合大学生参考 分类专栏还有其它的可视化博客哦&#xff01; 专栏地址&#xff1a;https://blog.csdn.net/qq_559…

数据结构--队列的链表实现

数据结构–队列的链表实现 队列的链表实现代码定义 typedef struct LinkNode {ElemType data;struct LinkNode* next; }LinkNode;typedef struct {LinkNode *front, *rear; }LinkQueue;带头结点 初始化 void InitQueue(LinkQueue &Q) {Q.front Q.rear (LinkNode*)malloc…

python进行windows系统UI自动化之【pyautoit】

python进行windows系统UI自动化之【pyautoit】 一、AutoIT中文手册1.1、安装AutoIt1.2、使用Auto Window Info 二、python引用2.1、安装2.2、引用2.3、使用2.3.1、窗口操作2.3.2、控件操作2.3.3、进程操作2.3.4、鼠标操作2.3.5、键盘操作2.3.5.1、Send 是非常有用的一个函数/命…

Segment Any Medical-Model (SAMM)在3D slicer上部署

参考&#xff1a; GitHub - bingogome/samm: A 3D Slicer integration to Metas SAM. https://www.cnblogs.com/odesey/p/17322413.html 一、下载代码仓库和权重文件 https://github.com/facebookresearch/segment-anything.git https://github.com/bingogome/samm.git htt…

举例说明Chatgpt模型训练的过程

Chatbot GPT模型训练过程详解 在人工智能领域&#xff0c;聊天机器人是一种模拟人类对话行为的计算机程序。近年来&#xff0c;随着深度学习和自然语言处理技术的飞速发展&#xff0c;聊天机器人越来越流行。本文将详细阐述GPT&#xff08;Generative Pre-trained Transformer&…