【循环结构 for i in循环】【i++】【shell 循环while语句】【嵌套循环】【循环until语句】【循环控制shift、continue、break exit】

本文主要是介绍【循环结构 for i in循环】【i++】【shell 循环while语句】【嵌套循环】【循环until语句】【循环控制shift、continue、break exit】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

标题shell脚本 迷茫期

在这里插入图片描述

shell脚本 加速执行脚本 一秒执行多个

在这里插入图片描述

shell编程-循环结构 for i in循环

hell循环-for语句
for i in {取值范围} #for是关键字 i是变量名 in是关键字
do #循环体的开始
循环体
done #循环体的结束

实战1:for i in

[root@linux-server script]# vim for.sh
#!/usr/bin/env bash

for i in {1…100} 循环池 从1 打印到100
do
echo $i 打出循环的值
done

i++

区别:
i++=先赋值在运算
++i
=先运算在赋值
参数解释:
默认值 i=1
条件 i<=多少?取决于定义,为用户输入的变量,先条件成立在执行命令
增幅 i++ 执行一次加一
for循环总结
总结
跟小于自己的做比较 一般都是 i++ 用<做比较都是 i++ 一般都会让他超出值 达到极限退出循环 不然会死循环
跟大于自己的做比较 一般 都是 i-- 用>做比较都是 i++ 一般都会让他超出值 达到极限退出循环 不然会死循环
在这里插入图片描述

实战 i++

[root@linux-server script]# vim for1.sh
#!/bin/bash
for (( i=1;i <= 5;i++ )) 先赋值在运算 每次循环i都会+1 所以只会打印5次
do
echo “$i”
done
[root@linux-server script]# chmod +x for1.sh
[root@linux-server script]# ./for1.sh

例子
[root@localhost script]# i=1
[root@localhost script]# h=1
[root@localhost script]# let x=i++
[root@localhost script]# echo $x
1
[root@localhost script]# echo $i
2
[root@localhost script]# let y=++h
[root@localhost script]# echo $y
2
[root@localhost script]# echo $h
2
案例 详解
在这里插入图片描述
在这里插入图片描述

for循环批量创建用户

脚本思路 总结
步骤1;先让用户输入想要创建账号 数量 密码 3个字符串 去 赋予值
步骤2;然后进行循环池 打印用户赋予的数量值
步骤3;进行判断用户是否存在
步骤4;进行if判断 如果 用户存在 怎么样 不存在怎么样

#!/usr/bin/bash
read -p “请设置用户名/数量/密码: " prefix num pass
cat <<-EOF
用户前缀: p r e f i x 用 户 数 量 : prefix 用户数量: prefix:num
用户密码:$pass
EOF
for i in $(seq 1 n u m ) d o u s e r = num) do user= num)douser=prefix$i
id $user &> /dev/null
if [ ? − e q 0 ] ; t h e n e c h o " ? -eq 0 ];then echo " ?eq0];thenecho"user is already exist!”
exit 0
else
useradd $user &> /dev/null
echo $pass | passwd --stdin $user &>/dev/null
fi
done
脚本理解
在这里插入图片描述
参数详解:
seq 打印序列号,只跟数字
seq 命令用于产生从某个数到另外一个数之间的所有整数。

seq命令的原理就不说了,这里说说为什么不能在{ }中使用变量。其实原因写在bash的man手册中:
大意是说,Bash中会最先展开{ }中的内容,这个时候KaTeX parse error: Expected '}', got 'EOF' at end of input: …是i在循环中读取的是‘{1..NUM}’的一个完整的字符串,输出时$NUM会被10替代,就有了’{1…10}'这样的结果。

shell 循环while语句

while 条件 #while关键字,条件和if的条件一样,#while循环当条件为真的时候循环同时会一直循环,也就所说的死循环,为假时不循环
do
循环体
done
#注意:while循环处理文件里面的行比较擅长,不管有没有空格都是一行。

案例:
vim c.sh
#!/usr/bin/bash
i=1
while [ $i -lt 50 ] 会陷入死循环 一直循环
do
echo $i
done

注意观察,#请问如何能够自动终止
#在shell中,let命令用于指定算术运算,即 let expr

i++进行解决死循环

在这里插入图片描述

#while循环批量创建用户:read line

脚本思路
步骤1; while 新循环参数 read line 读取文件的行
步骤2; 先赋值 执行命令 读取行数的哪一个 值
步骤3; 进行判断用户 存在没有,不存在进行创建,非交互修改密码

#通过一个文件批量创建用户:
#背景:写一个脚本,满足以下需求及应用,如一个文件的内容如下,根据文件内容实现批量创建用户,第一列为用户名,第二列为密码
[root@localhost script]# vim user_pass.txt #创建用户和密码文件
user1 qfedu123
user2 qfedu456
user3 qfedu567
user4 qfedu789
user5 qfedu012
脚本如下
#!/usr/bin/bash

[ $UID -ne 0 ] && exit 1
while read line #读取行
do
user=echo $line | awk '{print $1}' 打印 第1列
pass=echo $line | awk '{print $2}' 打印 第1列
id $user &> /dev/null || useradd $user && echo $pass | passwd $user --stdin
done < /opt/test/script/user_pass.txt #导入文件
脚本详解
在这里插入图片描述

嵌套循环,循环里面套循环

#!/usr/bin/bash
for i in {1…100} 一个循环池
do
while [ $i -lt 50 ] 套了一个循环
do
echo $i
#let i++
done
done
在这里插入图片描述

shell循环until语句

until 条件 #当后面的条件表达式为假的时候的才循环,为真的时候就停止了
do
循环体
done

#!/bin/bash
x=1
until [ $x -ge 10 ] 条件为假就一直循环
do
echo $x
x=expr $x + 1
done

x=1
while [ ! $x -ge 10 ]
do
echo $x
x=expr $x + 1 条件为真 停止
done

shell 循环控制shift、continue、break、exit

shift命令
#位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1。
在这里插入图片描述
#!/bin/bash
shift
echo “第一个位置参数: $1”
[root@linux-server script]# bash x_shift3.sh 2 3
第一个位置参数: 3

若用户要求 Shell 在不知道位置变量个数的情况下,还能逐个的把参数一一处理,也就是在 $1 后为 $2,在 $2 后面为 $3 等,则需要用shift把所有参数变成$1
#测试 shift 命令(x_shift.sh)
[root@linux-server script]# vim x_shift.sh
#!/bin/bash
until [ $# -eq 0 ]
do
echo “第一个参数为: $1 参数个数为: $#”
shift
done
执行以上程序:
[root@linux-server script]# bash x_shift3.sh 1 2 3 4
结果显示如下:
第一个参数为: 1 参数个数为: 4
第一个参数为: 2 参数个数为: 3
第一个参数为: 3 参数个数为: 2
第一个参数为: 4 参数个数为: 1

从上可知 shift 命令每执行一次,变量的个数($#)减一,而变量值提前一位
在这里插入图片描述
1.break
结束并退出本次循环
脚本测试
在这里插入图片描述
在这里插入图片描述
2.continue
在循环中不执行continue下面的代码,转而进入下一轮循环
在这里插入图片描述
在这里插入图片描述

3.exit
退出脚本
常带一个整数给系统,如 exit 0

在这里插入图片描述

这篇关于【循环结构 for i in循环】【i++】【shell 循环while语句】【嵌套循环】【循环until语句】【循环控制shift、continue、break exit】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/875813

相关文章

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

MySQL ORDER BY 语句常见用法、示例详解

《MySQLORDERBY语句常见用法、示例详解》ORDERBY是结构化查询语言(SQL)中的关键字,隶属于SELECT语句的子句结构,用于对查询结果集按指定列进行排序,本文给大家介绍MySQL... 目录mysql ORDER BY 语句详细说明1.基本语法2.排序方向详解3.多列排序4.常见用法示例5.

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总