lv3 嵌入式开发-7 linux shell脚本编程(分支语句、循环语句)

目录

1 分支语句

2 多路分支语句

3 for的用法

4 while的用法

5 循环控制语句

6 练习


1 分支语句

语法结构:

         if    表达式then  命令表fi    

如果表达式为真, 则执行命令表中的命令; 否则退出if语句, 即执行fi后面的语句。 if和fi是条件语句的语句括号, 必须成对使用; 命令表中的命令可以是一条, 也可以是若干条。

示例:

//示例1
#!/bin/bash read -p "input a filename:" file  //判断文件或者目录是否存在#test -e $file
#echo $?
if test -e $file                  //等同于 if [ -e $file ],注意空格不能随便删除
then echo "$file exist"            //如果存在文件名或者目录名会输出
fi//示例2
#!/bin/bash read -p "input a filename:" file  //判断文件或者目录是否存在if test -e $file                  //等同于 if [ -e $file ],注意空格不能随便删除
then                              echo "$file exist"            //如果存在文件名或者目录名会输出
elseecho "$file is not exist"echo "please check"
fi//示例3
#!/bin/bash 
read -p "input a filename:" file  //判断文件或者目录是否存在if [ -f $file ]                    //是否是普通文件                 
then                               //if 和 elif 都必须加thenecho "$file is a file"            
elif [ -d $file ]                   //是否是目录
thenecho "$file is a dir"
elseecho "$file is not a file or a dir"
fi

 

语法结构:

        if      表达式then 命令表1else  命令表2fi

如果表达式为真, 则执行命令表1中的命令, 再退出if语句; 否则执行命令表2中的语句, 再退出if语句. 注意: 无论表达式是否为真, 都有语句要执行. 

示例:

判断用户是否存在,如果存在,打印存在,如果不存在,打印不存在。

之前的作法:

其中^正则表达式,代表第一个是linux;wc -l 统计字符,大于0说明存在。

使用脚本写法:

#!/bin/bash RET=`grep "^linux:" /etc/passwd | wc -l`
if [ $RET -eq 1 ]                                 
then echo "exist"    	        
elseecho "not exist"
fi

test命令使用总结

test命令测试的条件成立时, 命令返回值为真(0),否则返回值为假(非0).

2 多路分支语句

多路分支语句case用于多重条件测试, 语法结构清晰自然.  其语法为:

示例:

判断输入的是yes/YES/y/Y 还是no/NO/N/n

#!/bin/bash read -p "input yes/no: " valcase $val inyes | y)echo "input yes";;YES | Y)echo "input YES";;no | n)echo "input no";;NO | N)echo "input NO";;
esac

 示例:

#!/bin/bash #学生成绩分级管理
#90-100 A
#70-90 B
#60-70 C
#0-59 Dread -p "input score:" val#-o 或
#-a 与
#! 非
# 等同于if [ $val -gt 100 ] || [ $val -lt 0]  #0-100
if [ $val -gt 100 -o $val -lt 0]  #0-100
thenecho "input error val"exit
fival=`expr $val / 10`
case $val in9 | 10)echo "A";;7 | 8)echo "B";;6)echo "C";;*)echo "D";;  #只有最后一个双分号可以省略
esac

3 for的用法

当循环次数已知或确定时,使用for循环语句来多次执行一条或一组命令。格式为:

	for   变量名   in   单词表do命令表done

变量依次取单词表中的各个单词,  每取一次单词, 就执行一次循环体中的命令.  循环次数由单词表中的单词数确定. 命令表中的命令可以是一条, 也可以是由分号或换行符分开的多条。

如果单词表是命令行上的所有位置参数时, 可以在for语句中省略 “in  单词表” 部分。 

示例

#!/bin/bash filename=`ls`
for file in $filename 
doif [ -f $file ] #可以对文件/目录进行分类管理thenecho "$file is a file"elseecho "$file is not a file"fi 
done

“$@” 每个内容是单独的个体

“$*” 是一个整体

//示例1
#!/bin/bash for val in $@
doecho "$val"
done//结果
linux@linux:~/shell$ ./for.sh 1 2 3 4
1
2
3
4//示例2
#!/bin/bash for val in $*
doecho "$val"
done//结果
linux@linux:~/shell$ ./for.sh 1 2 3 4
1
2
3
4//示例3
#!/bin/bash for val in "$@"
doecho "$val"
done//结果
linux@linux:~/shell$ ./for.sh 1 2 3 4
1
2
3
4//示例4
#!/bin/bash for val in "$*"
doecho "$val"
done//结果
linux@linux:~/shell$ ./for.sh 1 2 3 4
1 2 3 4

示例

#!/bin/bash
#for file in 1 2 3 4 5   下面双括号等同C语言用法
for ((i = 0; i < 5; i = i+1))
do echo "$file"
done

4 while的用法

语法结构为:

while    命令或表达式do命令表done

while语句首先测试其后的命令或表达式的值,如果为真,就执行一次循环体中的命令,然后再测试该命令或表达式的值,执行循环体,直到该命令或表达式为假时退出循环。  

while语句的退出状态为命令表中被执行的最后一条命令的退出状态。 

示例

#!/bin/bashi=0
#while [ $i -lt 5 ] 
while (( i < 5 ))
doecho "$i"i=`expr $i + 1`
done

5 循环控制语句

break 和 continue 

break  n  则跳出n层;       

continue语句则马上转到最近一层循环语句的下一轮循环上,       

continue  n则转到最近n层循环语句的下一轮循环上.

示例

#!/bin/bashi=0
#while [ $i -lt 5 ] 
while (( i < 5 ))
doecho "$i"if [ $i == 3 ]thenbreak   #跳出本层循环       0 1 2 3#continue   #跳出本次循环   0 1 2 3 3 3会一直打印3fii=`expr $i + 1`
done

6 练习

将当前目录下的普通文件,归档到hello.tar中;

#!/bin/bashfilename=`ls`
for file in $filename
doif [ -f $file ]then tar -rf hello.tar $filefi
done

计算下5!(5的阶乘)的结果,并打印出来;

#!/bin/bash
i=5
RET=1
while (( i > 1 ))
doRET=`expr $RET \* $i `i=`expr $i - 1`
done
echo $RET

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

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

相关文章

C++,day0907

#include <iostream>using namespace std; struct stu { private:int num; private:double score[32];public:void setNum(){cout <<"请输入学生人数:";cin >>num;}void input(){cout<<"请输入学生的成绩:"<<endl;for(int i…

ARM DIY(九)陀螺仪调试

前言 今天调试六轴陀螺仪 MPU6050 硬件 硬件很简单&#xff0c;使用 I2C 接口&#xff0c;并且没有使用中断引脚。 焊接上 MPU6050 芯片和上拉电阻、滤波电容。 检测 MPU6050 是挂在 I2C-0 上的&#xff0c;I2C-0 控制器的驱动已 OK&#xff0c;所以直接使用 I2C-0 检测 …

Linux与shell命令行学习

文章目录 走进shell基本的bash shell命令2.1 遍历目录 cd2.2 查看文件和目录列表 ls2.3 创建文件 touch2.4 复制文件 cp2.5 自动补全 tab2.6 链接文件 ln2.7 文件重命名 mv2.8 删除文件 rm2.9 创建目录 mkdir2.10 删除目录 rmdir2.11 查看文件类型 file2.12 查看整个文件 cat、…

ElementUI浅尝辄止19:Badge 标记

出现在按钮、图标旁的数字或状态标记。 1.如何使用&#xff1f; 可展示新消息数量。 //定义value属性&#xff0c;它接受Number或者String。<el-badge :value"12" class"item"><el-button size"small">评论</el-button> <…

ABAP BAPI_ACC_DOCUMENT_POST 中 EXTENSION1的用法

BAPI_ACC_DOCUMENT_POST 在过账会计凭证时候&#xff0c;经常会发现一些标准字段在参数中并没有 可以通过CMOD/SMOD增强出口--》ACBAPI01--》EXIT_SAPLACC4_001--》ZXACCU15 示例代码&#xff1a; DATA: wa_extension TYPE bapiextc,it_extension TYPE STANDARD TABLE OF ba…

springboot整合Interceptor

1.定义两个拦截器 一. package com.boot.intercept.intercept;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.H…

软件工程概述

软件工程概述 软件工程指的是应用计算机科学、数学及管理科学等原理&#xff0c;以工程化的原则和方法来解决软件问题的工程&#xff0c;目的是提高软件生产效率、提高软件质量、降低软件成本。 1. 计算机软件 计算机软件指的是计算机系统中的程序及其文档。程序是计算任务的…

圆圈加数字的css

方式一 .circle { width: 50px; height: 50px; border-radius: 50%; background-color: #f00; color: #fff; text-align: center; line-height: 50px; } .circle::before { content: attr(data-number); display: block; } <div class"circle" data-number"…

C++学习笔记--函数重载(2)

文章目录 1.3、Function Templates Handling1.3.1、Template Argument Deduction1.3.2、Template Argument Substitution 1.4、Overload Resolution1.4.1、Candidate functions1.4.2、Viable functions1.4.3、Tiebreakers 1.5、走一遍完整的流程1.6、Name Mangling1.7、总结 1.…

咖啡喝完还能建房?掺入混凝土强度高30%

咖啡是全世界消耗量最高的饮料&#xff0c;这也导致咖啡渣的数量相当大很特别&#xff0c;据估计&#xff0c;全球每年会产生1800万吨废弃咖啡残渣&#xff0c;其中大多数最终被填埋处理。它们会在垃圾填埋场中分解&#xff0c;释放出甲烷&#xff0c;而甲烷引起的全球变暖效应…

深度ESP32 PWM教程如何在ESP32 中使用PWM

关于ESP32PWM的简要说明 ESP32 SoC 满载了非常有用的外设&#xff0c;PWM 就是其中之一。是的。ESP32 的芯片中有一个专用的 PWM 硬件模块。脉宽调制或简称PWM是一种成熟且广泛使用的供电技术。 您可以使用 ESP32 的 PWM 来驱动 LED、电机&#xff08;普通直流电机和无刷电机…

ROS多话题同步回调

文章目录 ExactTime PolicyApproximateTime Policy参考ExactTime Policy 这种方法要求输入的消息的时间戳必须完全相同才调用回调函数。 #include <message_filters/subscriber.h> #include <message_filters/synchronizer.h> #include <message_filters/sync…

qt文件操作

对话框练习 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//字体按钮 void Widget::on_ztbtn_clicked() {//调用QFontDia…

在Spring Boot中使用Redis 5的Stream

引言 Redis是一个开源的高性能键值对存储系统&#xff0c;而Redis 5引入了新的数据结构——Stream&#xff08;流&#xff09;。Stream可以用于高效地保存和处理事件流数据。在本文中&#xff0c;我们将学习如何在Spring Boot应用程序中使用Redis 5的Stream功能。 步骤 步骤…

01_Flutter之下拉刷新和上拉加载

一.创建页面 由于我们需要请求网络&#xff0c;并将返回的数据渲染到页面上&#xff0c;所以需要继承StatefulWidget&#xff0c;本文涉及的接口&#xff0c;取自鸿神的玩android开放API class ProjectListPage extends StatefulWidget {overrideState<StatefulWidget>…

AMEYA360:士兰微推出600A/1200V IGBT汽车驱动模块,提升充电速度与行驶动力

随着人们对环保意识的提高和汽车驾驶体验感的不断追求&#xff0c;新能源汽车的市场需求逐渐增大&#xff0c;已然成为汽车发展的大趋势&#xff0c;但是新能源汽车充电时间长、续航里程短等问题仍然是汽车厂商和车主们的痛点。因此&#xff0c;需要更好的汽车驱动产品来实现“…

Java和Kotlin的Field在继承中的不同表现

Kotlin是一个宣称与Java兼容性较好的语言&#xff0c;但在接触后发现一些技术还是有“概念上”的冲突&#xff0c;本文就记录下两者对象的Field&#xff08;中文的说法有字段、域、属性、成员变量&#xff0c;下文若出现这些表达&#xff0c;指的都是这个东西&#xff09;在继承…

js摄像头动态检测

利用摄像头每一秒截图一次图像。然后计算2次图像之间的相似度。 如果相似度低于98%就会报警。 var video document.getElementsByClassName(inputvideo)[0]; video.innerHTML "<video classinput_video idcamera autoplay width640px height380px></video>…

工厂模式 与 抽象工厂模式 的区别

工厂模式&#xff1a; // 抽象产品接口 interface Product {void showInfo(); }// 具体产品A class ConcreteProductA implements Product {Overridepublic void showInfo() {System.out.println("This is Product A");} }// 具体产品B class ConcreteProductB impl…

windows10使用wheel安装tensorflow2.13.0/2.10.0

安装过程 安装虚拟环境安装virtualenv安装满足要求的python版本使用virtualenv创建指定python版本的虚拟环境 安装tensorflow2.13.0安装tensorflow-docs直接下载使用wheel下载 在VSCode编辑器中使用虚拟环境下的包 安装虚拟环境 这里笔者使用的是 virtualenv进行虚拟环境搭建的…