运维Shell脚本小试牛刀(五):until循环|循环控制break|continue

news2024/11/28 5:34:49


运维Shell脚本小试牛刀(一)

运维Shell脚本小试牛刀(二)

运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解

运维Shell脚本小试牛刀(四): 多层嵌套if...elif...elif....else fi_蜗牛杨哥的博客-CSDN博客

Cenos7安装小火车程序动画

运维Shell脚本小试牛刀(五):until循环

运维Shell脚本小试牛刀(六): Shell中的函数认知




  一: until与while类似,实现循环

 until基于一个条件表达式,添加不满足时执行until循环体, 但until与while条件判断相反,until在条件为假的时候才执行,一旦添加为真, 则退出循环体.

[root@www dicfor]# cat untilloop.sh 
#!/bin/bash -
#==================================================================================================================
#
#
#                           FILE:  untilloop.sh
#                           USAGE: ./untilloop.sh
#    DESCRIPTION: until与while类似,但是until时但条件不为真才执行
#        OPTIONS: -------
#        REQUIREMENTS: ---------

#        BUGS: ------
#        NOTES: -------- 
#        AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
#    ORGANIZATION:
#        CREATED: 2023-8-24 09:11:20    
#        REVISION: --------
#
#
#
#
#
#====================================================================================================================
var=1

until [ $var -gt 3 ]
do
   echo "The for loop is run $var times................."

   var=$(( var + 1 ))

done
 

二:测试脚本 


[root@www dicfor]# vi untilloop.sh 
[root@www dicfor]# ./untilloop.sh 
The for loop is run 1 times.................
The for loop is run 2 times.................
The for loop is run 3 times.................
[root@www dicfor]# vi untilloop.sh 
 


三: break循环控制

break与continue使用bash中循环控制的命令,break语句用于从for,while,until或者select循环体重退出;其语法为

  break [n]

n代表嵌套循环的层级,如果指定了n,break将退出n级嵌套循环;如果没有指定n或者n不大于或者等于1,则退出状态码为0,否则退出状态码为n;

#!/bin/bash -
#==================================================================================================================
#
#
#                           FILE:  forbreak.sh
#                           USAGE: ./forbreak.sh
#    DESCRIPTION:
#        OPTIONS: -------
#        REQUIREMENTS: ---------

#        BUGS: ------
#        NOTES: -------- 
#        AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
#    ORGANIZATION:
#        CREATED: 2023-8-24 09:11:20    
#        REVISION: --------
#
#
#
#
#
#====================================================================================================================
# 如果为指定参数,则打印脚本的使用方法,并返回退出状态码1

[ $# -eq 0 ] && { echo "Usage: $0 filepath"; exit 1; }

# 将位置参数赋值给变量match
match=$1
found=0

# 遍历目录/etc/* 下的所有文件

for file in /etc/*
do
 # 如果文件的路径与指定的参数文件路径匹配,则打印文件已找到,并退出for循环
if [ $file == "$match" ]
   then
   
    echo "The file $match was found........"
   cat $match 
   found=1
   #使用break退出for循环
   break
   fi
done

[ $found -ne 1 ] && echo "The file $match not found in /etc directory.."
 

四: 测试break样例脚本


[root@www dicfor]# ./forbreak.sh /etc/inittab
The file /etc/inittab was found........
./forbreak.sh:行41: found: 未找到命令
The file /etc/inittab not found in /etc directory..
[root@www dicfor]# vi forbreak.sh 
[root@www dicfor]# ./forbreak.sh 
Usage: ./forbreak.sh filepath
[root@www dicfor]# ./forbreak.sh /etc/inittab
The file /etc/inittab was found........
[root@www dicfor]# ./forbreak.sh /etc/hosts
The file /etc/hosts was found........
[root@www dicfor]# ./forbreak.sh /etc/my.cnf 
The file /etc/my.cnf was found........
[root@www dicfor]# vi forbreak.sh 
[root@www dicfor]# ./forbreak.sh /etc/my.cnf 
The file /etc/my.cnf was found........
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
[mysqld] 
#character config
character_set_server=utf8mb4
#设置端口
port=3306
explicit_defaults_for_timestamp=true
# 允许最大连接数
max_connections=1000
#设置mysql安装目录
datadir=/usr/local/mysql8/mysql-8.0.30
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql8/mysql-8.0.30/data
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=100

# 每次commit 日志缓存中的数据刷到磁盘中。通常设置为 1,意味着在事务提交前日志已被写入磁盘, 事务可以运行更长以及服务崩溃后的修复能力
innodb_flush_log_at_trx_commit=1
sync_binlog=1
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 是否对sql语句大小写敏,1表示不敏感 (注意:这个在mysql8中已经无法在配置文件中修改了,只有在初始化的时候进行配置,且如果初始化时配置了该属性,则在本配置文件中必须要有该属性的设置,否则启动报错。意思就是要么两个地方都配置,要么这里也不要配置。不然迎接你的只有报错)
#lower_case_table_names = 1
#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout  值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout = 1800
wait_timeout = 1800
#Metadata Lock最大时长(秒), 一般用于控制 alter操作的最大时长sine mysql5.6
#执行 DML操作时除了增加innodb事务锁外还增加Metadata Lock,其他alter(DDL)session将阻塞
lock_wait_timeout = 3600
#内部内存临时表的最大值。
#比如大数据量的group by ,order by时可能用到临时表,
#超过了这个值将写入磁盘,避免系统IO压力增大,默认16M
tmp_table_size = 64M
max_heap_table_size = 64M

# 配置密码插件使用低版本
default_authentication_plugin=mysql_native_password
# pid-file文件配置
pid-file=/usr/local/mysql8/mysql-8.0.30/mysqld.pid
# 配置日志目录
log_error=/usr/local/mysql8/mysql-8.0.30/log/mysql-error.log
slow_query_log_file=/usr/local/mysql8/mysql-8.0.30/log/mysql-slow.log
# 设置SQL模式
sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
#不限制导入导出 任意目录/temp/data/
secure_file_priv='/temp/data'

# 配置服务ID
server-id=100
# 配置二进制日志目录
log-bin=/usr/local/mysql8/mysql-8.0.30/binlog
#主从复制忽略的数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#开启主从复制的数据库
binlog-do-db=tope-pay-user
# bin log 日志格式
#STATEMENT:记录主库执行的SQL复制到从库; 调用时间函数时会导致主从数据不一致
#ROW:记录主库每一行的变化;效率低
#MIXED:修复一些主从数据不一致情况;本地变量调用还会存在问题;@@hostname
binlog_format=statement
#二进制日志自动删除/过期的天数。默认值为0,表示不自动删除
expire_logs_days=7
#跳过主从复制中遇到的所有错误或指定类型的错误
slave_skip_errors=1062
 

五: break跳出for循环多层嵌套 


[root@www dicfor]# cat breaknestedloop.sh 
#!/bin/bash -
#==================================================================================================================
#
#
#                           FILE:  breaknestedloop.sh
#                           USAGE: ./breaknestedloop.sh
#    DESCRIPTION:   break n 循环嵌套脚本
#        OPTIONS: -------
#        REQUIREMENTS: ---------

#        BUGS: ------
#        NOTES: -------- 
#        AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
#    ORGANIZATION:
#        CREATED: 2023-8-24 09:11:20    
#        REVISION: --------
#
#
#
#
#
#====================================================================================================================
#如果未传递参数,则打印脚本的使用方法,并返回退出状态码1

[ $# -eq 0 ] && echo "Usage: $0 command......."

# 将位置参数的值赋值给match变量,

match=$1
found=0

for dir in /bin /usr/bin
do
  echo "当前变量的目录为: ${dir}"
  #遍历目录下的所有的文件
  for file in $dir/*
  do
  echo "${dir} 目录中的文件为: $file "
# 如果文件名与指定的参数文件名匹配,则打印命令与找到,并退出嵌套的for循环
  if [ $(basename $file ) == "$match" ]
  then
    echo "遍历的目录中匹配到的文件为: $file"
    echo "The command $match was found..................."
    found=1
    # 退出两层的for循环
    break 2
   fi
 done

done
[ $found -ne 1 ] && echo "The command $match not found................"

六: 测试输出 


[root@www dicfor]# ./breaknestedloop.sh /usr/bin/yes
当前变量的目录为: /bin
/bin 目录中的文件为: /bin/[ 
/bin 目录中的文件为: /bin/a2p 
/bin 目录中的文件为: /bin/addr2line 
/bin 目录中的文件为: /bin/alias 
/bin 目录中的文件为: /bin/amuFormat.sh 
/bin 目录中的文件为: /bin/apropos 
/bin 目录中的文件为: /bin/ar 
/bin 目录中的文件为: /bin/arch 
/bin 目录中的文件为: /bin/as 
/bin 目录中的文件为: /bin/aserver 
/bin 目录中的文件为: /bin/attr 
/bin 目录中的文件为: /bin/aulast 
/bin 目录中的文件为: /bin/aulastlog 
/bin 目录中的文件为: /bin/ausyscall 
/bin 目录中的文件为: /bin/autoconf 
/bin 目录中的文件为: /bin/autoheader 
/bin 目录中的文件为: /bin/autom4te 
/bin 目录中的文件为: /bin/autoreconf 
 

七: cowsay 命令安装输出图案

[root@www tools]# yum -y install cowsay   
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.ustc.edu.cn
 * extras: mirrors.ustc.edu.cn
 * updates: mirrors.ustc.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 cowsay.noarch.0.3.04-4.el7 将被 安装
--> 解决依赖关系完成


[root@www tools]# animalsay ‘1’
 _____
< ‘1’ >
 -----
  \
   \   \_\_    _/_/
    \      \__/
           (oo)\_______
           (__)\       )\/\
               ||----w |
               ||     ||
 

八:continue循环控制 


[root@www dicfor]# cat continueloop.sh 
#!/bin/bash -
#==================================================================================================================
#
#
#    FILE:  checknumber.sh
#    USAGE: ./checknumber.sh
#
#         
#    DESCRIPTION:  continue循环控
#        OPTIONS: -------
#        REQUIREMENTS: ---------

#        BUGS: ------
#        NOTES: -------- 
#        AUTHOR: ---------YangGe (TOM) ,YangGe.freedom@icloud.com
#    ORGANIZATION:
#        CREATED: 2023-8-29 09:11:20
#        REVISION: --------
#
#
#
#
#
#===================================================================================================================
# 如果未指定运行脚本的指定参数,则打印脚本的使用方法,并返回退出状态码1
[ $# -eq 0 ] && { echo "Usage: $0 directory"; exit 1; }

# 如果指定的目录不存在,则打印错误信息,并返回退出状态码1

[ ! -d $1 ] && { echo "Error: The directory $1 does not exist."; exit 1; }

# 如果没有切换到指定的目录,则打印响应的错误信息,并返回退出状态码1
cd $1 || { echo "Cannot cd to the directory $1"; exit 1; }

# 遍历指定目录下的所有文件
for filename in $(ls)

do
    # 如果文件名不包含大写字母,则直接跳转到下一次循环
    if [ $filename != *[[:upper:]]* ]
    then
    echo "not exists satisfy files !"
    # 忽略for循环体中剩余的语句直接跳转到下一次循环
    continue
    fi
    
    # 将变量中的字母转换为小写

    new=`echo $filename | tr 'A-Z' 'a-z'`
    # 将文件重新命名
    mv $filename $new
    echo "The file $filename renamed to $new."
done
 


脚本运行结果:


[root@www dicfor]# ./continueloop.sh 
Usage: ./continueloop.sh directory
[root@www dicfor]# ./continueloop.sh /usr/local/example/dicfor/logs
[root@www dicfor]# ./continueloop.sh /usr/local/example/dicfor/log
Error: The directory /usr/local/example/dicfor/log does not exist.
[root@www dicfor]# ./continueloop.sh /usr/local/example/dicfor/log
Error: The directory /usr/local/example/dicfor/log does not exist.
[root@www dicfor]# ./continueloop.sh /usr/local/example/dicfor/logs
not exists satisfy files !
[root@www dicfor]# mkdir -p ./logs/TEST.TXT
[root@www dicfor]# ./continueloop.sh /usr/local/example/dicfor/logs
not exists satisfy files !
The file TEST.TXT renamed to test.txt.
 

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

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

相关文章

Photoscan/Metashape 2.0.0中的地面激光扫描处理

在Metashape(原Photoscan)2.0.0, 结构化地面激光扫描和非结构化航空激光扫描都可以使用导入点云&#xff08;文件>导入>导入点云&#xff09;命令导入。导入时会保留所有点属性&#xff08;包括结构化信息&#xff09;。 本文讨论以下主题 如何将激光扫描数据导入项目&am…

高忆管理:六连板!我乐家居累计涨超77%,公司:存在估值较高风险

9月4日&#xff0c;家具板块继续活泼&#xff0c;同花顺家具板块涨幅达5.46%&#xff0c;顶固集创&#xff08;300749.SZ&#xff09;20CM涨停&#xff0c;美之高(834765)涨超12%&#xff0c;帝欧家居&#xff08;002798.SZ&#xff09;、亚振家居&#xff08;603389.SH&#x…

day04_基本数据类型丶变量丶基本数据类型转换

前置知识 计算机世界中只有二进制。那么在计算机中存储和运算的所有数据都要转为二进制。包括数字、字符、图片、声音、视频等。 进制 进制也就是进位计数制&#xff0c;是人为定义的带进位的计数方法 。不同的进制可以按照一定的规则进行转换。 进制的分类 十进制&#x…

sqlserver数据库链接mysql服务器访问数据

sqlserver数据库链接mysql服务器访问数据 关于SqlServer数据库怎么链接mysql数据库我一直不明白&#xff0c;今天项目碰到一个问题需要链接&#xff0c;我就研究了一下&#xff0c;然后就成功了&#xff0c;在这里记录一下。也欢迎朋友互相学习交流借鉴。 1.使用navicat打开S…

推荐6款普通人搞副业做自媒体AI工具

hi&#xff0c;同学们&#xff0c;我是赤辰&#xff0c;本期是赤辰第5篇AI工具类教程&#xff0c;文章底部准备了粉丝福利&#xff0c;看完可以领取&#xff01;身边越来越多的小伙伴靠自媒体实现财富自由了&#xff01;因此&#xff0c;推荐大家在工作之余或空闲时间从事自媒体…

windows查看端口占用,通过端口找进程号(查找进程号),通过进程号定位应用名(查找应用)(netstat、tasklist)

文章目录 通过端口号查看进程号netstat通过进程号定位应用程序tasklist 通过端口号查看进程号netstat 在Windows系统中&#xff0c;可以使用 netstat 命令来查看端口的占用情况。以下是具体的步骤&#xff1a; 打开命令提示符&#xff08;CMD&#xff09;&#xff1a;按WinR组…

听厂家聊聊:劳保鞋何时该报废?

在现代工业社会里&#xff0c;劳保鞋作为一种较为常见的劳保用品&#xff0c;被广泛用于各行各业。劳保鞋&#xff0c;也称安全鞋&#xff0c;是保护使用者脚部免受意外事故引起的伤害&#xff0c;可以对足部起到一定的防护作用。不管是防砸还是防静电&#xff0c;甚至是耐高温…

进程、线程与构造方法

进程、线程与构造方法 目录 一&#xff0e; 进程与线程1. 通俗解释2. 代码实现3. 线程生命周期&#xff08;图解&#xff09; 二&#xff0e; 构造方法 一&#xff0e; 进程与线程 1. 通俗解释 进程&#xff1a;就像电脑上运行的软件&#xff0c;例如QQ等。 线程&#xff1a;…

robot framework入门案例

Robot Framework是一个完全基于关键字测试驱动的框架&#xff1b; 关键字可以理解为一个能实现特定功能的对象&#xff08;如ssh连接、登录、新增配置等&#xff09; 有了关键字后&#xff0c;就可以通过关键字组合成案例&#xff1b; 所以入门案例只需要两个文件 &#xf…

AcWing 788. 逆序对的数量(归并排序)

基本思想 归并排序是用分治思想&#xff0c;分治模式在每一层上有三个步骤&#xff1a; &#xff08;1&#xff09;分解&#xff1a;将n个元素分解成n/2个元素的子序列。 &#xff08;2&#xff09;解决&#xff1a;用合并排序法对两个子序列递归排序。 &#xff08;3&…

护眼灯的色温是多少比较好?如何选择护眼台灯

色温是台灯的一个重要指标&#xff0c;它可以表示光线中包含颜色的成分&#xff0c;从理论上简单来讲&#xff0c;色温从低到高对应着光线从黑到红&#xff0c;再到黄、白&#xff0c;最后到蓝色光。色温也可以对应大众所熟悉的色调&#xff0c;色温越高&#xff0c;光线偏白色…

开学哪种电容笔好用?推荐的ipad手写笔

如果你希望通过iPad进行绘画&#xff0c;那么Apple Pencil就很重要了。不过&#xff0c;苹果原装电容笔的售价实在是太高了&#xff0c;许多人无法承受。因此&#xff0c;最佳方法是选择一款平替电容笔。我以前一直用iPad平板&#xff0c;也是个数码爱好者&#xff0c;这两年我…

AJAX学习笔记6 JQuery对AJAX进行封装

AJAX学习笔记5同步与异步理解_biubiubiu0706的博客-CSDN博客 AJAX请求相关的代码都是类似的&#xff0c;有很多重复的代码&#xff0c;这些重复的代码能不能不写&#xff0c;能不能封装一个工具类。要发送ajax请求的话&#xff0c;就直接调用这个工具类中的相关函数即可。 用J…

jar包冲突: java.lang.NoSuchFieldError: REFLECTION

接入第三方时&#xff0c;导入了第三方的SDK&#xff0c;导致项目其他功能读取本地xml时出错&#xff0c;根据具体日志查看发现是具体某个jar包版本的问题 根据上图可看到&#xff0c;问题在com.sun.xml.bind包&#xff0c;于是根据便向着把我导入的SDK下所属的该jar过滤掉&am…

MySQL递归查询所有子集

在 MySQL 数据库中&#xff0c;WITH RECURSIVE 是递归查询的一种语法。然而&#xff0c;MySQL 并不支持 WITH RECURSIVE 语法。相反&#xff0c;MySQL 提供了另一种递归查询的方法&#xff0c;即使用 CONNECT BY 和 START WITH 语法。 如果您需要执行递归查询&#xff0c;建议…

C++多态虚析构和纯虚析构

虚析构和纯虚析构 多态使用时&#xff0c;如果子类中有属性开辟到堆区&#xff0c;那么父类指针在释放时无法调用子类的析构代码 注释&#xff1a;父类指针在释放时&#xff0c;只会调用父类自己的析构函数&#xff0c;而无法调用子类的析构函数 解决方式&#xff1a;将父类的…

诚实守信、专业严谨、合规自律、公开透明——嘉泰实业

每一次暖心的沟通都是一次公益,真诚不会因为它的渺小而被忽略;每一声问候都是一次公益,善意不会因为它的普通而被埋没。熟悉嘉泰实业的人都知道,这家企业不但擅长在金融理财领域里面呼风唤雨,同时也非常擅长在公益事业当中践行,属于企业的责任心,为更多有困难的群体带来大爱的传…

结构体的简单介绍(2)

目录 结构体的特殊声明 结构体的自引用 结构体的特殊声明 在声明结构的时候&#xff0c;可以不完全的声明。 比如&#xff1a; struct {int a;char b;float c; }x; 以上结构在声明的时候省略掉了结构体标签&#xff08;tag&#xff09;。 那么会有什么影响呢&#xff1f…

Qt CMake 中国象棋程序实现

前驱课程 C自学精简实践教程 目录(必读) C数据结构与算法实现&#xff08;目录&#xff09; Qt 入门实战教程&#xff08;目录&#xff09; 项目初衷 为学习 Qt 的人提供一个合适的有一定难度的综合型练习项目。 在学会写代码之前&#xff0c;先看别人怎么写的代码。深入…

计算机竞赛 基于深度学习的人脸性别年龄识别 - 图像识别 opencv

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 毕业设计…