linux中shell的流程和循环控制

流程控制和循环控制

  • shell流程控制
    • 流程注意
    • 条件结构
      • 数值比较
      • 文件测试
      • 字符串比较
    • if语句
      • 单分支结构
      • 双分支结构
      • 多分支结构
      • 嵌套结构
    • case语句
      • 格式
  • shell循环控制
    • for循环
    • while循环
    • until循环
    • expect交互
    • shell循环控制

shell流程控制

任何编程都离不开判断(流控)

流程注意

1.[]表示条件测试,这里的空格很重要
2.在shell中,then和fi是分开的语句,如果要放在一行,需要分号隔开
3.注意if判断中对变量的处理,需要加引号
4.判断不支持浮点值
5.如果单独使用<或者>系统会认为是重定向,如果要使用,要对这些符号转意
6.默认运行if语句中的命令,所产生的错误信息,会出现在脚本的输出结果中,一般会使用&>/dev/null
7.使用-n或者-z来检查长度时候,没有定义的变量也为0
8.空变量和没有初始化的变量会对shell脚本造成灾难性的影响,再不确定变量内容时,可以使用-n或者-z测试一下
9.$?变量包含了之前执行命令的退出状态,最近完成的前台进程调试脚本
sh -n 文件名    //仅调试脚本中的语法错误
sh -x 文件名   //逐句语句追踪
sh -v 文件名   //显示执行过程详细信息
sh -vx 文件名   //以调试的方式执行,查询整个执行过程,第一行是计算机看到的第二行是计算机执行的第三行是计算机输出的

条件结构

test 条件
条件为真返回0;条件为假返回1
[ 条件表达式 ]
[[ 条件表达式 ]]test 能够理解3种类型的表达式 
文件测试
字符串比较
数字比较

数值比较

[ -gt ]  大于
[ -lt ]  小于
[ -eq ]  等于
[ -ne ]  不等于
[ -ge ]  大于等于
[ -le ]  小于等于

文件测试

-f filename :当filename存在时返回真
-b filename :当filename存在并且是块文件时返回真
-d pathname :当pathname存在并且是一个目录时返回真
-h filename :当filename存在并且是符号链接文件时返回真,软连接
-c filename :当filename存在并且是字符文件时返回真
-e pathname :当由pathname指定的文件或目录存在时返回真
-g pathname :当由pathname指定的文件或目录存在并且设置了SGID位时返回真  (SGID一种特殊的权限)
-k pathname :当由pathname指定的文件或目录存在并且设置了"粘滞"位时返回真
-p filename :当filename存在并且是命名管道时返回真
-r pathname :当由pathname指定的文件或目录存在并且可读时返回真
-s filename :当filename存在并且文件大小大于0时返回真
-S filename :当filename存在并且是socket时返回真
-t fd :当fd是与终端设备相关联的文件描述符时返回真
-w pathname :当由pathname指定的文件或目录存在并且可写时返回真
-x pathname :当由pathname指定的文件或目录存在并且可执行时时返回真
-O pathname :当由pathname存在并且被当前进程的有效用户id的用户拥有时返回真
-G pathname :当由pathname存在并且属于当前进程的有效用户id的用户的用户组时返回真

字符串比较

比较字符串的时候字符串建议加上双引号
=:等于
!=:不等于
-z:判断字符长度是为0
-n:判断字符长度不是为0当条件测试比较复杂时,需要多个条件同时成立,就需要混合条件测试
逻辑的(and)与(or)&&逻辑的and的意思,-a,两个条件同时完成时成立,为真
||逻辑的or的意思,-o,两个条件一个成立,为真表示方法:
[ 条件一 -a 条件二 ]
[[ 条件二 && 条件一 ]]
[ 条件一] && [条件二 ][ 条件一 -o 条件二 ]
[[ 条件二 || 条件一 ]]
[ 条件一] || [条件二 ]

if语句

单分支结构

if [ 条件 ] ; then符合该条件执行的语句
fi

双分支结构

表示方法一:
if [ 条件 ] 
then符合该条件执行的语句
else不符合该条件执行的语句
fi表示方法二:
if 命令
then命令返回结果为真
else命令返回结果为假
fi

多分支结构

if [ 条件1 ] 
then符合该条件执行的语句elif [ 条件2 ]
then	符合该条件执行的语句elif [ 条件3 ]
then	符合该条件执行的语句else不符合该条件执行的语句
fi

嵌套结构

if[条件测试1] 
then命令序列			if[条件测试2]then命令序列				else命令序列fi				
else命令序列
fi

case语句

格式

case 变量 in 
模式1)命令序列1;;			
模式2)命令序列2;;			
模式3)命令序列3;;		
*)无匹配命令序列后;;
esac

shell循环控制

for循环

for 变量名  in 取值列表 
do循环体
done
for循环优化脚本    {}&:并发      在do和done之间加{}&:for 变量名  in 取值列表 
do
{循环体
}&
done

while循环

===当条件测试成立(条件测试为真),执行循环体do循环体
done
===将文件内的语句输出到循环体中
while read user
do循环体
done < 文件.txt

until循环

=======当条件测试成立,条件测试为假视为成立,执行循环体until 条件测试
do循环体
done		

expect交互

yum -y install expect tcl tcl-devel      //安装expect交互
vim expect.exp       //运行脚本使用命令:expect expect.exp
#!/usr/bin/expect
spawn ssh root@ip地址       //启动系统中需要交互的程序expect 
{"yes/no" {send "yes\r"; exp_continue}    //send发送回答,\r代表回车  //exp_continue,在"yes/no"没出现时忽略这句话"passwd:" {send "密码\r"} 
}interact            //停留在当前程序位置========================================================
bash调用expect语言
/usr/bin/expect <<-EOF
expect语言内容
expect eof             //运行结束后,离开当前程序位置,返回之前工作位置
EOF

shell循环控制

shift
位置参数可以用shift命令左移。
如shift 3表示原来的$4现在变成$1break
结束并退出本次循环continue 
在循环中不执行continue下面的代码,转而进入下一轮循环exit
退出脚本,结束该程序

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

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

相关文章

准备好通过 “Breakin’ B.I.G.” 在嘻哈音乐界大放异彩吧!

在 The Sandbox 推出人物化身系列后&#xff0c;是时候通过 “Breakin’ B.I.G.” 重返嘻哈音乐的黄金时代了。该体验于 12 月 20 日推出&#xff0c;一直持续到 1 月 3 日&#xff0c;让玩家回到 20 世纪 90 年代&#xff0c;体验以 Notorious B.I.G 为主角的 2D 街舞游戏。 获…

初始Web服务器

一、web服务器 1、什么是web服务器&#xff1f; web服务器就是web项目的容器&#xff0c;我们将开发好的web项目部署到web容器中&#xff0c;才能使用网络中的用户通过浏览器进行访问。 一张图带你了解web服务器有啥作用&#xff1a; 在我的电脑上有一个已经做好的项目&#…

网络通信-入门1

网口框架 100M 2. 物理层解读 2.1 同步的方法&#xff1a;编码 为了让接收方在没有外部时钟参考的情况也能确定每一位的起始、结束和中间位置&#xff0c;在传输信号时不直接采用二进制编码。在 10BASE-T 的传输方式中采用曼彻斯特编码&#xff0c;在 100BASE-T 中则采用 4B/…

分布式技术之流量控制技术

文章目录 什么是流量控制&#xff1f;分布式系统流量控制策略漏桶策略令牌桶策略两种策略对比Sentinel 流量控制工作原理 什么是流量控制&#xff1f; 流量控制&#xff0c;如果学过计算机网络的话&#xff0c;第一反应肯定是网络传输中的流量控制。网络传输中的流量控制&…

家政行业的小程序都需要具备哪些功能?

家政服务小程序&#xff0c;覆盖多城&#xff0c;在线派单 适合行业&#xff1a;家电维修、家政保洁、养生护理、美容美发、预约服务上门等 系统功能&#xff1a;服务管理、商品管理、拼团/秒杀、订单管理、会员管理、派单管理、师傅管理、商家/服务点、财务管理、城市代理、次…

arkts中@Watch监听的使用

概述 Watch用于监听状态变量的变化&#xff0c;当状态变量变化时&#xff0c;Watch的回调方法将被调用。Watch在ArkUI框架内部判断数值有无更新使用的是严格相等&#xff08;&#xff09;&#xff0c;遵循严格相等规范。当在严格相等为false的情况下&#xff0c;就会触发Watch的…

总结项目中oauth2模块的配置流程及实际业务oauth2认证记录(Spring Security)

文章目录 简单示例添加oauth2的依赖配置认证服务器配置资源服务器配置安全使用http或者curl命令测试 实际业务中工具类&#xff08;记录&#xff09;&#xff1a;认证服务器资源服务器、配置安全用户验证登录控制层配置文件application.yml 项目中用过的spring security&#x…

Apollo自动驾驶系统:实现城市可持续交通的迈向

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言引言&#xff1a;1. 什么是微服务架构&#xff1f;2. 微服务架构的组成要素3. 微服务架构的挑战和解决方案4. 微服务架构的可扩展性和弹性 第二部分&#x…

ACW741.斐波那契额数列

输入整数 N&#xff0c;求出斐波那契数列中的第 N项是多少。 斐波那契数列的第 0项是 0&#xff0c;第 1项是 1&#xff0c;从第 2 项开始的每一项都等于前两项之和。输入格式 第一行包含整数 T&#xff0c;表示共有T个测试数据。接下来 T行&#xff0c;每行包含一个整数 N。输…

LeetCode刷题--- 黄金矿工

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述…

【Proteus仿真】【STM32单片机】自动除湿器系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用按键、LCD1602液晶、DHT11温湿度、继电器除湿模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示DHT11传感器检测的湿度值阈值…

10-2 HNCST - 多线程4 - 线程同步Condition——python

有一家店铺里有4个销售和2个搬运工&#xff0c;销售负责卖货&#xff0c;搬运工负责从仓库搬货物&#xff0c;已知该店铺的存货有size&#xff0c;当销售或搬运工做完所有商品数量后&#xff0c;他们各自就可以下班。销售可以同时卖货&#xff0c;但只能按照货架顺序每次卖出一…

基于SpringBoot的客户关系管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的客户管理系统,java项目…

[JS设计模式]Prototype Pattern

Prototype pattern Prototype pattern可便于同类型的多个对象共享属性。原型&#xff08;prototype&#xff09;是JS原生的对象&#xff0c;其他对象可以通过原型链&#xff08;prototype chain&#xff09;来访问原型。单独看这句描述可能还是有点儿抽象&#xff0c;下面通过…

深度解析ShardingJDBC:Java开发者的分库分表利器

一、ShardingSphere ShardingSphere 是一款起源于当当网内部的应用框架。2015年在当当网内部诞 生&#xff0c;最初就叫ShardingJDBC 。2016年的时候&#xff0c;由其中一个主要的开发人员张亮&#xff0c; 带入到京东数科&#xff0c;组件团队继续开发。在国内历经了当当网、电…

Unity 新版 Meta XR SDK 无法导入解决方法

文章目录 &#x1f4d5;教程说明&#x1f4d5;新版 SDK 说明&#x1f4d5;从 Meta 官网导入开发包⭐依赖包⭐如何导入⭐导入后包存放在哪里了&#xff1f;⭐场景样例文件去哪了&#xff1f; 此教程相关的详细教案&#xff0c;文档&#xff0c;思维导图和工程文件会放入 Spatia…

报表控件FastReport VCL 中的新 S3 传输 (Amazon)

在本文中&#xff0c;我们将探讨新的 S3 传输。从功能上来说&#xff0c;S3 与大多数人习惯使用的有很大不同&#xff0c;因此在本文的开头&#xff0c;我们将详细介绍它的主要功能。 FastReport .NET 是适用于.NET Core 3&#xff0c;ASP.NET&#xff0c;MVC和Windows窗体的全…

软件测试/测试开发丨Python内置库学习笔记

内置库 一、内置库OS 1、os概述 os: Operating Systemos 模块的常用功能跨平台的差异 2、os使用 导入 os 模块查看 os 模块使用文档 help(os)dir(os) import os# 查看os模块说明文档 help(os)# 查看os模块的属性和方法 print(dir(os))3、os 常用方法 &#xff08;1&…

全渠道客服系统推荐:选型指南与最佳实践分享

售后服务是影响客户满意度的最直接的因素。有些企业不注重产品的售后服务&#xff0c;不仅是对客户的伤害&#xff0c;更是对企业品牌的损害。所以&#xff0c;做好售后服务对于企业来讲至关重要。 企业谈到做好售后服务&#xff0c;少不了一款好用的客服系统工具。其中&#…

C# PrinterSettings修改打印机纸张类型,paperType

需求&#xff1a;直接上图&#xff0c;PrinterSettings只能改变纸张大小&#xff0c;打印质量&#xff0c;无法更改打印纸类型 爱普生打印机打印照片已经设置了最高质量&#xff0c;打印图片仍不清晰&#xff0c;需要修改打印纸类型&#xff0c;使用PrintDialog调出对话框&…