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、…

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…

软件工程概述

软件工程概述 软件工程指的是应用计算机科学、数学及管理科学等原理&#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.…

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

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

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…

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

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

js摄像头动态检测

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

windows10使用wheel安装tensorflow2.13.0/2.10.0

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

VIRTIO-BLK代码分析(2)VIRTIO驱动分析

QEMU模拟的VIRTIO设备同时也是PCIE设备&#xff0c;Guest中VIRTIO PCIE驱动与之匹配&#xff0c;根据设备驱动模型&#xff0c;最终触发probe函数virtio_pci_probe()。该probe函数使能PCIE设备&#xff0c;并注册VIRTIO设备&#xff0c;并与VIRTIO-BLK匹配&#xff0c;触发VIRT…

通俗易懂讲解大模型:Tokenizer

Tokenizer Tokenizer 是 NLP pipeline 的核心组件之一。Tokenizer 的目标是&#xff1a;将文本转换为模型可以处理的数据。模型只能处理数字&#xff0c;因此 Tokenizer 需要将文本输入转换为数字输入。 通常而言有三种类型的 Tokenizer &#xff1a;Word-based Tokenizer、Cha…

2023国赛数学建模A题思路分析 - 定日镜场的优化设计

# 1 赛题 A 题 定日镜场的优化设计 构建以新能源为主体的新型电力系统&#xff0c; 是我国实现“碳达峰”“碳中和”目标的一项重要 措施。塔式太阳能光热发电是一种低碳环保的新型清洁能源技术[1]。 定日镜是塔式太阳能光热发电站(以下简称塔式电站)收集太阳能的基本组件&…

校园二手物品交易系统微信小程序设计

系统简介 本网最大的特点就功能全面&#xff0c;结构简单&#xff0c;角色功能明确。其不同角色实现以下基本功能。 服务端 后台首页&#xff1a;可以直接跳转到后台首页。 用户信息管理&#xff1a;管理所有申请通过的用户。 商品信息管理&#xff1a;管理校园二手物品中…

华为云使用脚本初始化Linux数据盘

初始化新挂载的磁盘 登录云服务器&#xff0c;执行以下命令获取自动初始化磁盘脚本。 wget https://ecs-instance-driver.obs.cn-north-1.myhuaweicloud.com/datadisk/LinuxVMDataDiskAutoInitialize.sh 说明&#xff1a; 若回显异常&#xff0c;请检查云服务器是否绑定弹性公…

029:vue项目,勾选后今天不再弹窗提示

第029个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

豪华卧室怎么装?快来看看吧

一阵轻松的叹息&#xff0c;由柔软的质地、新鲜的空气和扎实的设计带来。只需稍微借鉴这些豪华卧室的创意&#xff0c;这一切都可以成为你的。 用华丽的四柱床提升 四柱床的柱子为床框增添了另一种维度&#xff0c;同时保持通风。长长的线条提高了房间的高度&#xff0c;吸引…