首页 > 系统相关 >09 - Shell流程控制语句

09 - Shell流程控制语句

时间:2023-12-09 15:33:56浏览次数:28  
标签:语句 elif Shell 09 echo 运算符 命令 score 条件

1. if-else语句

能够使用if条件语句进行条件判断

1.1 if 语法

if  条件
then
    命令
fi
if 条件; then 命令; fi

1.2 if-else 语法

if  条件
then
   命令
else
   命令
fi

1.3 if elif else 语法

if  条件1
then
   命令1
elif 条件2
then
    命令2
elif 条件3
then
    命令3
……
else
   命令N
fi

1.4 演示

需求

提示"请输入你的考试成绩:" 接收用户输入一个成绩, 之后使用if else条件句判断
要求1: 小于 60 输出"不及格"
要求2: 大于等于70 并且 小于80 输出"中等"
要求3: 大于等于80 并且 小于90 输出"良好"
要求4: 大于等于90 并且 小于等于100 输出"优秀"
要求5: 以上不符合输出"成绩不合法"

control1.sh脚本代码

#!/bin/bash
read -p "请输入你的考试成绩:" score
if (( $score < 60 )); then
    echo "不及格"
elif (( $score >= 60 && $score < 70 )); then
    echo "及格"
elif (( $score >= 70 && $score < 80 )); then
    echo "中等"
elif (( $score >= 80 && $score < 90 )); then
    echo "良好"
elif (( $score >= 90 && $score <= 100 )); then
    echo "优秀"
else
    echo "成绩不合法"
fi

(())是一种数学计算命令,它除了可以进行最基本的加减乘除运算,还可以进行大于、小于、等于等关系运算,以及与、或、非逻辑运算。当 a 和 b 相等时,(( $a == $b ))判断条件成立,进入 if,执行 then 后边的 echo 语句

2. if条件判断语句的退出状态

linux任何命令的的执行都会有一个退出状态, 无论是内置命令还是外部文件命令. 还是自定义的 Shell 函数,当它退出(运行结束)时,都会返回一个比较小的整数值给调用(使用)它的程序,这就是命令的退出状态

大多数命令状态0代表成功, 非0代表失败. 也有特殊的命令,比如 diff 命令用来比较两个文件的不同,对于“没有差别”的文件返回 0,对于“找到差别”的文件返回 1,对无效文件名返回 2

Shell 中,有多种方式取得命令的退出状态,其中 $? 是最常见的一种.

((1==2))

echo $? 

# 结果为1,1==2不成立,退出状态为1

2.2 退出状态和逻辑运算符的组合

Shell if 语句使用逻辑运算符将多个退出状态组合起来,这样就可以一次判断多个条件了。

运算符 使用格式 说明
&& 或 -a 条件1 && 条件2 逻辑与运算符,当 条件1 和 条件2 同时成立时,
整个表达式才成立。 如果检测到 条件1 的退出状态为 0,
就不会再检测 条件2 了,因为不管 条件2 的退出状态是什么,
整个表达式必然都是不成立的,检测了也是多此一举。
|| 或 -o 条件1 || 条件2 逻辑或运算符,条件1 和 条件2 两个表
达式中只要有一个成立,整个表达式就成立。 如果检
测到 条件1 的退出状态为 1,就不会再检测 条件2 了,因为
不管 条件2 的退出状态是什么,整个表达式必然都是成立的,
检测了也是多此一举。
! !条件 逻辑非运算符,相当于“取反”的效果。如果 条件 成立,那么整
个表达式就不成立;如果 条件 不成立,那么整个表达式就成立。

2.3 示例

提示输入"请输入文件全名: "和"请输入数据:" 并接收文件名与数据

使用逻辑运算符判断满足2 条件 : 文件需要具有可写权限 和 输入的数据长度不为0

满足以上2个条件 将用户输入的 数据 写入到指定的文件中去

#!/bin/bash

read -p "请输入文件全名:" filename
read -p "请输入数据:" data

if [-w $filename -a -n $data]
then 
  echo $data
  echo $data > $filename
  echo "成功"
else
  echo "失败"
fi

test命令用于对文件或字符串进行检测, -w 判断文件是否存在并且可写, -n 用于检测字符串是否非空, 后续讲解.

$data > $filename 其中 > 用于将内容输出到指定文件中去

2.test语句

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
功能与[]一样

2.1 整数比较

if test 数字1 options 数字2 
then  
...
fi

options具体如下

参数 说明
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真

2.2 字符串比较

标签:语句,elif,Shell,09,echo,运算符,命令,score,条件
From: https://www.cnblogs.com/Icer-newer/p/17890947.html

相关文章

  • 转载:MongoDB的删除文档、查询文档语句
    本文主要介绍MongoDB的删除文档、查询文档命令语句。 目录MongoDB删除文档MongoDB查询文档 MongoDB删除文档MongoDB是一种基于文档的NoSQL数据库,它使用BSON格式存储文档。删除文档是MongoDB数据库中的常见操作之一。下面是MongoDB删除文档的详细介绍和示例:使用......
  • 1209考试总结
    只打暴力能得240分的比赛。题目链接A.火柴棍打一个\(n\leq40\)的暴搜可以发现规律:\(ans_i=ans_{i-7}\times10+8\)。显然有f[]={0,1,7,4,2,0,8,10,18,22,20,28,68,88,108,188,200,208,288,688}。然后就没了。考场选择自信打表。然后Lemon代码长度限制50KB。挂完。......
  • 12.09
    今天利用上午时间完成了.netc#的实验四编写一个简易的文件管理器,通过本次实验,练习TreeView、ListView和SplitContainer控件的使用,同时熟悉C#文件系统的操作方法以及File类和Directory类的使用。 通过Windows窗体应用程序,实现了一个简单的文件浏览器界面。界面分为左右......
  • 08-Shell计算命令
    1.expr命令expr(evaluateexpressions的缩写),译为“表达式求值”。Shellexpr是一个功能强大,并且比较复杂的命令,它除了可以实现整数计算,还可以结合一些选项对字符串进行处理,例如计算字符串长度、字符串比较、字符串匹配、字符串提取等.1.1计算语法expr算术运算符表达式#......
  • 20231209
    我还活着。早上一起来就绷不住了。我昨天收拾塑形镜的用具的时候忘了把护理液拿回来。昨晚我给家长说了,然后家长说没有就不用了呗。然后今天早上我就没用。我妈拿着一个没开封的护理液(外面的盒子都没拆)问我我用了吗。(这算是明知故问吗?)我疑惑了,我说我没用,我不知道啊。我妈......
  • 使用8卡3090微调llama2-70B模型
    写在前面很多问题尚未弄清,还在进一步调整目前已知我用8卡的3090采用deepspeedZeRO3进行运行,下面是deepspeed3的配置1{2"fp16":{3"enabled":"auto",4"loss_scale":0,5"loss_scale_window":1000,6......
  • shell中三种语句
    1:if语句2:for语句for语句就是循环语句,要指定一个列表或者变量,就是有具体的循环的次数,可以使用for语句介绍: 使用for循环语句时,需要指定一个变量及取值列表,针对每个不同的取值重复执行相同的命令序列,直到变量值用完退出循环。然后在这里取值列表也被称为for语句的执行条件。for......
  • 无涯教程-Linux - Unix - What is Shell?函数
    该Shell为您提供了UNIX系统的接口。它收集您的输入,并根据该输入执行程序。程序完成执行后,将显示该程序的输出。Shell是一个环境,我们可以在其中运行命令,程序和Shell脚本。Shell的样式不同,就像操作系统的样式不同。每种Shell程序都有其自己的一组公认的命令和功能。Shell提......
  • Java_2 判断语句
    1if语句1.1基本if-else语句当条件成立时,执行某些语句;否则执行另一些语句。importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);inta=sc.nextInt();if......
  • 【CCFCSP】2209真题笔记
    -1.如此编码分析daisuki代数题了,直接无脑套公式子任务有提示,记得参考测试数据:1532767222222222222222预期结果:111111111111111AC:#include<iostream>usingnamespacestd;constintmaxn=25;intn,m,tmp;inta[maxn],b[maxn];......