我们一起来学Shell - shell的循环控制
文章目录
我们一起来学Shell - 初识shell
我们一起来学Shell - shell的变量
我们一起来学Shell - shell的条件判断
我们一起来学Shell - shell的循环控制
我们一起来学Shell - shell的数组
我们一起来学Shell - shell的函数
我们一起来学Shell - shell的并发及并发控制
我们一起来学Shell - 正则表达式
Shell 循环之 for 语句
for循环的运作方式,是将串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区域(在do和done 之间),直到所有元素取尽为止。
其中,串行是一些字符串的组合,彼此用$IFS所定义的分隔符(如空格符)隔开,这些字符串称为字段。
语法结构
for 变量 in 值集合
do
执行命令
done
for每次从值集合中取一个值赋值给变量do - done将赋值后的变量带入执行的命令得到执行结果 ,- 重复以上两个步骤,直到值集合中的值被 一 一 获取赋值给变量得到所有结果,循环结束
列出 var 目录下各子目录占用磁盘空间的大小
#!/usr/bin/env bash
DIR="/var"
for i in $(ls ${DIR})
do
[ -d "${DIR}/$i" ] && du -sh ${DIR}/$i
done
用 for 循环创建 demo1-demo10 目录,然后在 demo1-demo10 目录下创建 test1-test10 目录
#!/usr/bin/env bash
for i in $(seq 1 10)
do
mkdir /tmp/demo${i}
for j in $(seq 1 10)
do
mkdir /tmp/demo${i}/test${j}
done
done
for循环 - 99 乘法表
#!/usr/bin/env bash
for (( i=1; i<=9; i++ ))
do
for (( j=1; j<=i; j++ ))
do
let "k=${i}*${j}"
echo -ne "${i}*${j}=${k}\t"
done
echo " "
done
Shell 循环之 while 语句
语法格式
while 条件测试
do
执行命令
done
while 首先进行条件测试,如果传回值为0(条件测试为真),则进入循环,执行命令区域,否则不进入循环
满足 while 测试条件,执行命令区域,直到 while 的测试条件不满足结束执行while循环(如果条件一直满足执行无穷循环)。
while循环 - 99 乘法表
#!/usr/bin/env bash
a=1
b=1
while (( a <= 9 ))
do
while (( b <= a ))
do
let "c=${a}*${b}"
echo -ne "${a}*${b}=${c}\t"
let b++
done
let a++
let b=1
echo " "
done
Shell 循环之 until 语句
while循环的条件测试是测真值,until循环则是测假值。
语法格式
until 条件测试
do
执行命令
done
until 条件测试结果为假(传回值不为0),就进入循环。
条件测试不满足,执行命令区域。直到 until 条件满足,结束执行until 循环(如果条件一直不满足则执行无穷循环)。
until循环 - 99 乘法表
#!/usr/bin/env bash
a=1
b=1
until (( a > 9 ))
do
until (( b > a ))
do
let "c=${a}*${b}"
echo -ne "${a}*${b}=${c}\t"
let b++
done
let a++
let b=1
echo " "
done
Shell 循环控制
break,continue,exit 一般用于循环结构中控制循环的走向。
| 命令 | 说明 |
|---|---|
| break n | n 表示跳出循环的次数,如果省略 n 表示跳出整个循环 |
| continue n | n 表示退到第n层继续循环,如果省略n表示跳过本次循环进入下一次循环 |
| exit n | 退出当前的shell程序,并返回 n,n 也可以省略 |
| return | 用于返回一个退出值给调用的函数 |
| shift | 用于将参数列表list左移指定次数,最左端的那个参数就从列表中删除,其后边的参数继续进入循环 |
break指令
break[N]:提前结束第N层循环,最内层为第1层
语法格式
while CONDITION1; do
CMD1
...
if CONDITION2; then
break
fi
CMDn
...
done
当数字等于3的时候,则跳出循环,输出”game over”,循环结束后,输出“complate”
#!/usr/bin/env bash
for (( i=0; i<=9; i++ ))
do
if [ $i -eq 3 ]; then
echo "game over"
break
fi
echo $i
done
echo "complate"
- break:结束本次循环(整个),退出脚本
continue 指令
continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为第1层
语法格式
while CONDITION1;do
CMD1
...
if CONDITION2; then
continue
fi
CMDn
...
done
当数字等于3的时候,输出“game over”
#!/usr/bin/env bash
for (( i=0; i<=9; i++ ))
do
if [ $i -eq 3 ]; then
echo "game over"
continue
fi
echo $i
done
- continue:提前结束本次循环,提前进入下一轮循环
exit 指令
退出当前的shell,和break的区别在于,break只是跳出了循环,后续的内容,任然会继续执行,但是exit是直接退出程序,后续的内容,不再执行
当数字等于3的时候,输出“game over”,并退出当前的shell
#!/usr/bin/env bash
for (( i=0; i<=9; i++ ))
do
if [ $i -eq 3 ]; then
echo "game over"
exit 1
fi
echo $i
done
shift 指令
- shift 命令用于将参数列表 list 左移指定次数,最左端的那个参数就从列表中删除,其后边的参数继续进入循环。
- shift[N]:用于将参量列表 list 左移指定次数,缺省为左移一次。
- 参量列表 list 一旦被移动,最左端的那个参数就从列表中删除。
- while 循环遍历位置参量列表时,常用到 shift
输出一个三角形
#!/usr/bin/env bash
while [[ $# > 0 ]]
do
echo $*
shift
done
运行脚本
sh study.sh 1 2 3 4 5 6
结果如下
1 2 3 4 5 6
2 3 4 5 6
3 4 5 6
4 5 6
5 6
6
一个一个输出
#!/usr/bin/env bash
while [[ $# > 0 ]]
do
echo $1
shift
sleep 1
done
运行脚本
sh study.sh 1 2 3 4 5 6
结果如下
5
4
3
2
1
我们一起来学Shell - shell的循环控制的更多相关文章
- 我们一起来学Shell - shell的并发及并发控制
文章目录 bash的并发 未使用并发的脚本 简单修改 使用wait命令 控制并发进程的数量 文件描述符 查看当前进程打开的文件 自定义当前进程用描述符号操作文件 管道 我们一起来学Shell - 初识 ...
- 我们一起来学Shell - shell的函数
文章目录 定义函数 执行不带参数的函数 执行带参数的函数 函数的执行总结 我们一起来学Shell - 初识shell 我们一起来学Shell - shell的变量 我们一起来学Shell - shel ...
- 我们一起来学Shell - shell的数组
文章目录 什么是数组 数组中常用变量 数组的定义 小括号定义数组变量 小括号加键值对定义数组变量 分别定义数组变量 动态地定义数组变量 数组赋值的切片 遍历数组 关联数组 我们一起来学Shell - ...
- 我们一起来学Shell - shell的条件判断
文章目录 Shell 条件测试语法 符号说明 Shell 测试表达式 文件测试表达式 字符串测试表达式 整数操作符 逻辑操作符 测试表达式的区别总结 Shell 条件判断之if语句 单分支 IF 条件 ...
- [转帖][Bash Shell] Shell学习笔记
[Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html 阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...
- 刷题记录:[De1ctf] shell shell shell
目录 刷题记录:[De1ctf] shell shell shell 一.知识点 1.源码泄露 2.正则表达式不完善导致sql注入 3.soapclient反序列化->ssrf 4.扫描内网 5 ...
- SDK/JDK,Shell/Shell脚本,Apache/APR ,MTK
SDK 软件开发工具包(SoftwareDevelopmentKit) API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用 ...
- 以练代学之shell入门(一)
5年前的时候,开始接触linux操作系统,接触的第一步就是学习shell脚本.用小脚本以连代学入了门. 1) 9*9乘法输出 2) 检验主机的服务是否启动 3) 冒泡排序 4) 备份当时team服务器 ...
- 『忘了再学』Shell基础 — 3、echo命令的介绍与使用
目录 1.echo命令的作用 2.echo命令的基本用法 3.echo命令的-e选项用法 4.echo命令一些特殊用法 (1)输出字符带有字体颜色 (2)输出字符带有背景颜色 在讲Shell脚本之前, ...
随机推荐
- 日志收集系统系列(三)之LogAgent
一.什么是LogAhent 类似于在linux下通过tail的方法读日志文件,将读取的内容发给kafka,这里的tailf是可以动态变化的,当配置文件发生变化时,可以通知我们程序自动增加需要增加的配置 ...
- SYCOJ304末尾0的个数
https://oj.shiyancang.cn/Problem/304.html 首先数据范围不可能算出来的,那么就要看数的性质. 0是怎么来的首先我们知道,有一个0,就必然会有一个5和2. n!在 ...
- python多环境管理一(venv与virtualenv)
一.背景 我们经常会遇见这样的场景: 1.各个项目使用的python版本不相同 由于Python的解释器版本众多,各版本之间差异非常大.特别是python2和python3,互不兼容. 有些项目可能用 ...
- [未完] Linux 4.4 USB —— spiflash模拟usb大容量存储设备 调试记录 Gadget Mass Stroage
linux 4.4 USB Gadget Mass Stroage 硬件平台: licheepi nano衍生 调试记录 驱动信息 │ This driver is a replacement for ...
- Texture+PBR两种工作流程
一.导入Texture 1.Inpspector TextureSize 2的n次幂,底层图形学需要,计算更快:不使用2的倍数,系统也会添加像素补全2n: 有最大尺寸限制8k,cubemap最高4k: ...
- Python与Javascript相互调用超详细讲解(2022年1月最新)(三)基本原理Part 3 - 通过C/C++联通
目录 TL; DR python调javascript javascript调python 原理 基于Node.js的javascript调用python 从Node调用python函数 V8 嵌入P ...
- MySQL的学习记录 DAY03~
小记:昨天打了新冠加强针,今天开始拉肚子,嗓子疼,超级难受~
- linux创建用户与登录提示motd与系统运行状态目录
目录 一:登录提示文件 二:linux创建用户 三:系统日志目录 四:保存系统运行状态的目录 一:登录提示文件 登录成功之后显示的信息. 进入文本编辑 /etc/motd 文件中内容,会在用户登录系统 ...
- python浮点数计算--5
#!/usr/bin/python #coding=utf-8 i=1.0 j=3 print(i*j) print(i+j) print(i**j) 备注:无论是哪种运算,只要有操作数是浮点数,py ...
- Power Apps 创建响应式布局
前言 我们都知道Power Apps作为低代码平台,最大的优势就是各个设备之间的兼容性,尤其是自带的响应式布局,非常好用. 这不,我们就为大家分享一下,如何使用Power Apps画布应用,创建响应式 ...