6、流程控制(重点)

news/2024/7/7 19:09:30

文章目录

  • 6、流程控制(重点)
    • 6.1 if 判断
    • 6.2 case 语句
    • 6.3 for 循环
    • 6.4 while 循环


尚硅谷2022版Linux扩展篇Shell教程-讲师:武晟然

壁立千仞 无欲则刚

6、流程控制(重点)

6.1 if 判断

1)基本语法
(1)单分支

if [ 条件判断式 ];then
程序
fi

或者

if [ 条件判断式 ]
then
程序
fi

(2)多分支

if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi

注意事项:
①[ 条件判断式 ],中括号和条件判断式之间必须有空格
②if 后要有空格
2)案例实操
输入一个数字,如果是 1,则输出 one,如果是 2,则输出 tow,
如果是其它,输出number。

[root@centos7-101 scripts]# touch if.sh
[root@centos7-101 scripts]# vim if.sh 
#!/bin/bash
if [ $1 -eq 1 ]
then
echo "one"
elif [ $1 -eq 2 ]
then
echo "tow"
else
echo "number"
fi

[root@centos7-101 scripts]# chmod u+x if.sh 
[root@centos7-101 scripts]# ./if.sh 1
one

问题
如果不输入参数就会报错

[root@centos7-101 scripts]# ./if.sh
./if.sh: 第 2 行:[: -eq: 期待一元表达式
./if.sh: 第 5 行:[: -eq: 期待一元表达式
number

解决

#!/bin/bash
if [ "$1"x = "1"x ]
then
echo "one"
elif [ "$1"x = "2"x ]
then
echo "tow"
else
echo "number"
fi

6.2 case 语句

1)基本语法
case $变量名 in
“值 1”)
如果变量的值等于值 1,则执行程序 1
;;
“值 2”)
如果变量的值等于值 2,则执行程序 2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意事项:
(1)case 行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
(2)双分号“;;”表示命令序列结束,相当于 java 中的 break。
(3)最后的“*)”表示默认模式,相当于 java 中的 default。
2)案例实操
输入一个数字,如果是 1,则输出 one,如果是 2,则输出 tow,如果是其它,输出number。

[root@centos7-101 scripts]# touch case.sh
[root@centos7-101 scripts]# vim case.sh 
#!/bin/bash
case $1 in
"1")
echo "one"
;;
"2")
echo "tow"
;;
*)
echo "number"
;;
esac

[root@centos7-101 scripts]# chmod u+x case.sh 
[root@centos7-101 scripts]# ./case.sh 1
one
[root@centos7-101 scripts]# ./case.sh 2
tow
[root@centos7-101 scripts]# ./case.sh 3
number

6.3 for 循环

1)基本语法 1
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
2)案例实操
从 1 加到 100

[root@centos7-101 scripts]# touch for1.sh
[root@centos7-101 scripts]# vim for1.sh 
#!/bin/bash
sum=0
# 在双小括号内,可以使用数学上的符号进行数字比较
for((i=0;i<=100;i++))
do
sum=$[$sum+$i]
done
echo $sum

[root@centos7-101 scripts]# chmod u+x for1.sh 
[root@centos7-101 scripts]# ./for1.sh 
5050

3)基本语法 2
for 变量 in 值 1 值 2 值 3…
do
程序
done
4)案例实操
(1)打印所有输入参数

[root@centos7-101 scripts]# touch for2.sh
[root@centos7-101 scripts]# vim for2.sh 
#!/bin/bash
for i in windows linux macos
do
echo "$i"
done

[root@centos7-101 scripts]# chmod u+x for2.sh 
[root@centos7-101 scripts]# ./for2.sh 
windows
linux
macos

(2)比较$*和$@区别

$*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n的形式输出所有参数。

[root@centos7-101 scripts]# touch for3.sh
[root@centos7-101 scripts]# vim for3.sh 
#!/bin/bash
echo '==========$*========='
for i in $*
do
echo $i
done
echo '==========$@========='
for i in $@
do
echo $i
done

[root@centos7-101 scripts]# chmod u+x for3.sh 
[root@centos7-101 scripts]# ./for3.sh a b c d e f
==========$*=========
a b c d e f
==========$@=========
a b c d e f

当它们被双引号“”包含时,$*会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输出所有参数;$@会将各个参数分开,以“$1” “$2”…“$n”的形式输出所有参数。

[root@centos7-101 scripts]# vim for3.sh 
#!/bin/bash
echo '==========$*========='
#$*中的所有参数看成是一个整体,所以这个 for 循环只会循环一次
for i in $*
do
echo $i
done
echo '==========$@========='
#$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
for i in $@
do
echo $i
done

[root@centos7-101 scripts]# ./for3.sh a b c d e f
==========$*=========
a b c d e f
==========$@=========
a b c d e f

6.4 while 循环

1)基本语法
while [ 条件判断式 ]
do
程序
done
2)案例实操
从 1 加到 100

[root@centos7-101 scripts]# touch while.sh
[root@centos7-101 scripts]# vim while.sh 
#!/bin/bash
sum=0
i=1
while [ $i -le 100 ]
do
sum=$[$sum+$i]
i=$[$i+1]
# len a++
done
echo $sum

[root@centos7-101 scripts]# chmod u+x while.sh 
[root@centos7-101 scripts]# ./while.sh 
5050

http://lihuaxi.xjx100.cn/news/295497.html

相关文章

Spring MVC中@Controller和@RequestMapping注解详解

在《第一个Spring MVC应用》教程中创建了两个传统风格的控制器&#xff0c;它们是实现 Controller 接口的类。传统风格的控制器不仅需要在配置文件中部署映射&#xff0c;而且只能编写一个处理方法&#xff0c;不够灵活。使用基于注解的控制器具有以下两个优点&#xff1a; 在…

基于SSM的邮箱客户端的设计与实现

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1 选题及意义 1 1.2 邮箱发展现状 1 1.2.1开源邮件系统 2 1.2.2国外商业邮件系统 2 1.2.3国内商业邮件系统 2 1.3研究内容 4 第2章 相关技术的理论概述 5 2.1 JSPServlet技术优势 5 2.2Mysql数据库的介绍 6 2.3 tomcat服务器介绍 6 2…

07【SpringMVC常用注解】

文章目录一、SpringMVC常用注解1.1 PathVariable1.2 RequestParam1.3 CookieValue1.4 RequestHeader1.5 SessionAttribute1.6 SessionAttributes1.7 RequestAttribute1.8 ModelAttribute一、SpringMVC常用注解 搭建项目&#xff0c;引入Maven依赖&#xff1a; <dependenci…

Vue中常见的loader的作用

file-loader&#xff1a;把文件输出到一个文件夹中&#xff0c;在代码中通过相对 URL 去引用输出的文件 url-loader&#xff1a;和 file-loader 类似&#xff0c;但是能在文件很小的情况下以 base64 的方式把文件内容注入到代码中去 source-map-loader&#xff1a;加载额外的…

【ESP32】ESP-Face 人脸检测识别

文章目录1. ESP-Face1.1 人脸检测1.2 人脸识别1.3 深度学习库1. ESP-Face 这是一个提供人脸检测和人脸识别功能以及神经网络操作的组件。它可以用作某些项目的组件&#xff0c;因为它不支持任何外围接口。默认情况下&#xff0c;它与项目级存储库ESP-WHO一起工作。 1.1 人脸检…

Kamiya丨Kamiya艾美捷AREG酶联免疫吸附试验原理

Kamiya艾美捷AREG酶联免疫吸附试验预期用途&#xff1a; 该试剂盒是一种用于体外定量测量大鼠AREG的夹心酶免疫测定法血清、血浆和其他生物流体。仅供研究使用。不用于诊断程序。 存储&#xff1a; 所有试剂应按照小瓶上的标签保存。校准器、检测试剂A、检测试剂B和96孔带板应…

【895. 最大频率栈】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 设计一个类似堆栈的数据结构&#xff0c;将元素推入堆栈&#xff0c;并从堆栈中弹出出现频率最高的元素。 实现 FreqStack 类: FreqStack() 构造一个空的堆栈。void push(int val) 将一个整数 val …

Springboot毕业设计毕设作品,个人博客系统设计与实现

功能清单 【后台管理员功能】 系统设置&#xff1a;设置关于我们、联系我们、加入我们、法律声明 会员列表&#xff1a;查看所有注册会员信息&#xff0c;支持删除 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支…