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

news2024/12/25 23:42:38

目录

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"            //如果存在文件名或者目录名会输出
else
    echo "$file is not exist"
    echo "please check"
fi


//示例3
#!/bin/bash 
read -p "input a filename:" file  //判断文件或者目录是否存在

if [ -f $file ]                    //是否是普通文件                 
then                               //if 和 elif 都必须加then
	echo "$file is a file"            
elif [ -d $file ]                   //是否是目录
then
    echo "$file is a dir"
else
    echo "$file is not a file or a dir"
fi

 

语法结构:

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

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

示例:

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

之前的作法:

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

使用脚本写法:

#!/bin/bash 

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

test命令使用总结

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

2 多路分支语句

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

示例:

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

#!/bin/bash 

read -p "input yes/no: " val

case $val in
	yes | 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 D

read -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
then
    echo "input error val"
    exit
fi

val=`expr $val / 10`
case $val in
	9 | 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 
do
	if [ -f $file ] #可以对文件/目录进行分类管理
	then
		echo "$file is a file"
	else
		echo "$file is not a file"
	fi 
done

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

“$*” 是一个整体

//示例1
#!/bin/bash 

for val in $@
do
    echo "$val"
done

//结果
linux@linux:~/shell$ ./for.sh 1 2 3 4
1
2
3
4


//示例2
#!/bin/bash 

for val in $*
do
    echo "$val"
done

//结果
linux@linux:~/shell$ ./for.sh 1 2 3 4
1
2
3
4


//示例3
#!/bin/bash 

for val in "$@"
do
    echo "$val"
done


//结果
linux@linux:~/shell$ ./for.sh 1 2 3 4
1
2
3
4

//示例4
#!/bin/bash 

for val in "$*"
do
    echo "$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/bash

i=0
#while [ $i -lt 5 ] 
while (( i < 5 ))
do
	echo "$i"
	i=`expr $i + 1`
done

5 循环控制语句

break 和 continue 

break  n  则跳出n层;       

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

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

示例

#!/bin/bash

i=0
#while [ $i -lt 5 ] 
while (( i < 5 ))
do
	echo "$i"
	if [ $i == 3 ]
	then
		break   #跳出本层循环       0 1 2 3
		#continue   #跳出本次循环   0 1 2 3 3 3会一直打印3
	fi
	i=`expr $i + 1`
done

6 练习

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

#!/bin/bash

filename=`ls`
for file in $filename
do
    if [ -f $file ]
    then 
        tar -rf hello.tar $file
    fi
done

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

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

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

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

相关文章

(数字图像处理MATLAB+Python)第十二章图像编码-第一、二节:图像编码基本理论和无损编码

文章目录 一&#xff1a;图像编码基本理论&#xff08;1&#xff09;图像压缩的必要性&#xff08;2&#xff09;图像压缩的可能性A&#xff1a;编码冗余B&#xff1a;像素间冗余C&#xff1a;心理视觉冗余 &#xff08;3&#xff09;图像压缩方法分类A&#xff1a;基于编码前后…

搭建单机版FastDFS分布式文件存储系统

一、准备工作 1、下载FastDFS安装包和依赖包 https://codeload.github.com/happyfish100/libfastcommon/tar.gz/V1.0.43 https://codeload.github.com/happyfish100/fastdfs/tar.gz/V6.06 https://codeload.github.com/happyfish100/fastdfs-nginx-module/tar.gz/V1.22 注&…

U盘之识别量产工具

了解常识 U盘&#xff08;USB闪存驱动器&#xff09;是一种可重复擦写的存储设备&#xff0c;具有便携、容量大、使用方便等特点&#xff0c;是现代电脑用户存储和传输数据的主要设备之一。 以下是关于U盘的常识&#xff1a; U盘的存储容量通常以GB&#xff08;千兆字节&#x…

Java对象内存分配流程

文章目录 一、前言二、Java对象内存分配流程2.1、分配流程2.2、什么是逃逸分析&#xff1f;2.2.1逃逸分析主要关注两个方面的信息&#xff1a;2.2.2逃逸分析的好处包括&#xff1a;2.2.3、为什么要分配到栈上&#xff1f; 2.3、什么是大对象&#xff1f;2.4、什么是TLAB&#x…

微服务-kubernetes安装

文章目录 一、前言二、kubernetes2.1、Kubernetes (K8S) 是什么2.1.1、主要特性&#xff1a;2.2.2、传统部署方式&#xff1a;2.2.3、虚拟机部署2.2.4容器部署2.2.5什么时候需要 Kubernetes2.2.6、Kubernetes 集群架构 三、kubernetes安装3.1、主节点需要组件3.1.1、设置对应主…

SpingMvc入门

SpingMvc入门 1.MVC Spring的工作流程&#xff1a;2.sping mvc入门3.静态资源处理 前言 Spring MVC是一种基于Java的web应用开发框架&#xff0c;它采用了MVC&#xff08;Model-View-Controller&#xff09;设计模式来帮助开发者组织和管理应用程序的各个组件。 1.MVC Spring的…

Spring Security安全登录的调用过程以及获取权限的调用过程

1.第一次登录时候调用/user/login整个流程分析 (0)权限授理 首先调用SecurityConfig.java中的config函数将jwtAuthenticationTokenFilter过滤器放在UsernamePasswordAuthenticationFilter之前 Override protected void configure(HttpSecurity http) throws Exception{......…

2023-9-4 欧拉函数

题目链接&#xff1a;欧拉函数 #include <iostream>using namespace std;int main() {int n;cin >> n;while(n --){int x;cin >> x;int res x;for(int i 2; i < x / i; i){if(x % i 0){res res / i * (i - 1); // 公式 N * (1 - 1 / p1) * (1 - 1/ p2…

R语言应用interactionR包进行亚组相加交互作用分析

在统计分析中交互作用是指某因素的作用随其他因素水平变化而变化&#xff0c;两因素共同作用不等于两因素单独作用之和(相加交互作用)或之积(相乘交互作用)。相互作用的评估是尺度相关的&#xff1a;乘法或加法。乘法尺度上的相互作用意味着两次暴露的综合效应大于&#xff08;…

kubernetes常见面试问题详解

在面试的时候&#xff0c;面试官常常会问一些问题&#xff1a; k8s是什么&#xff1f;有什么用?k8s由哪些组件组成&#xff1f;pod的启动流程&#xff1f;k8s里有哪些控制器&#xff1f;k8s的调度器里有哪些调度算法&#xff1f;pod和pod之间的通信过程&#xff1f;外面用户访…

规避【虚拟专线技术】使用风险实现业务系统安全

本文为作者学习文章&#xff0c;按作者习惯写成&#xff0c;如有错误或需要追加内容请留言&#xff08;不喜勿喷&#xff09; 本文为追加文章&#xff0c;后期慢慢追加 一、技战法描述 VPN是利用Internet等公共网络基础设施&#xff0c;通过隧道加密通信技 术&#xff0c;为用…

Linux中的多线程剖析

目录 1、前言 2、多线程理解 2.1 线程 2.2 通俗了解进程和线程 2.2.1 进程是资源分配的基本单位 2.2.2 Linux中的线程是一种轻量化进程 2.3 进程和线程详解 2.3.1 创建一个线程 (pthread_create) 2.3.2 线程自己的一部分数据 2.3.3 线程组 2.3.4 关于进程的其他操作…

Android之RecyclerView仿ViewPage滑动

文章目录 前言一、效果图二、实现步骤1.xml主布局2.所有用到的drawable资源文件3.xml item布局4.adapter适配器5.javabean实体类6.activity使用 总结 前言 我们都知道ViewPageFragment滑动&#xff0c;但是的需求里面已经有了这玩意&#xff0c;但是在Fragment中还要有类似功能…

Springboot + Sqlite实战(离线部署成功)

最近有个需求&#xff0c;是手机软件离线使用&#xff0c; 用的springboot mybatis-plus mysql&#xff0c;无法实现&#xff0c;于是考虑使用内嵌式轻量级的数据库SQLlite 引入依赖 <dependency><groupId>org.xerial</groupId><artifactId>sqlite-…

手写Mybatis:第10章-使用策略模式,调用参数处理器

文章目录 一、目标&#xff1a;参数处理器二、设计&#xff1a;参数处理器三、实现&#xff1a;参数处理器3.1 工程结构3.2 参数处理器关系图3.3 入参数校准3.4 参数策略处理器3.4.1 JDBC枚举类型修改3.4.2 类型处理器接口3.4.3 模板模式&#xff1a;类型处理器抽象基类3.4.4 类…

drone的简单使用

&#xff08;一&#xff09;简介 Drone 是一个基于Docker容器技术的可扩展的持续集成引擎&#xff0c;用于自动化测试、构建、发布。每个构建都在一个临时的Docker容器中执行&#xff0c;使开发人员能够完全控制其构建环境并保证隔离。开发者只需在项目中包含 .drone.yml文件&…

Java“牵手”唯品会商品列表数据,关键词搜索唯品会商品数据接口,唯品会API申请指南

唯品会商城是一个网上购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取唯品会商品列表和商品详情页面数据&#xff0c;您可以通过开放平台的接口或者直接访问唯品会商城的网页来获取商品详情信息。以下是两种常用方法的介…

《智能网联汽车自动驾驶功能测试规程》

一、 编制背景 2018 年4 月12 日&#xff0c;工业和信息化部、公安部、交通运输部联合发布《智能网联汽车道路测试管理规范(试行)》&#xff08;以下简称《管理规范》&#xff09;&#xff0c;对智能网联汽车道路测试申请、审核、管理以及测试主体、测试驾驶人和测试车辆要求等…

webpack5 (三)

webpack 高级配置 其实就是对 webpack 进行优化&#xff0c;让代码在编译/运行时性能更好 1. 提升开发体验 2. 提升打包构建速度 3. 减少代码体积 4. 优化代码运行性能 一、提升开发体验 sourcemap 在编译打包后所有的 css 和 js 都合并为了一个文件&#xff0c;并多了很多…

管理类联考——数学——汇总篇——知识点突破——数据分析——计数原理

角度——⛲️ 一、考点讲解 分类计数原理&#xff08;加法原理&#xff09; (1&#xff09;定义 如果完成一件事有n类办法&#xff0c;只要选择其中一类办法中的任何一种方法&#xff0c;就可以完成这件事。若第一类办法中有 m 1 m_1 m1​种不同的方法&#xff0c;第二类办法中…