我们一起来学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的循环控制的更多相关文章

  1. 我们一起来学Shell - shell的并发及并发控制

    文章目录 bash的并发 未使用并发的脚本 简单修改 使用wait命令 控制并发进程的数量 文件描述符 查看当前进程打开的文件 自定义当前进程用描述符号操作文件 管道 我们一起来学Shell - 初识 ...

  2. 我们一起来学Shell - shell的函数

    文章目录 定义函数 执行不带参数的函数 执行带参数的函数 函数的执行总结 我们一起来学Shell - 初识shell 我们一起来学Shell - shell的变量 我们一起来学Shell - shel ...

  3. 我们一起来学Shell - shell的数组

    文章目录 什么是数组 数组中常用变量 数组的定义 小括号定义数组变量 小括号加键值对定义数组变量 分别定义数组变量 动态地定义数组变量 数组赋值的切片 遍历数组 关联数组 我们一起来学Shell - ...

  4. 我们一起来学Shell - shell的条件判断

    文章目录 Shell 条件测试语法 符号说明 Shell 测试表达式 文件测试表达式 字符串测试表达式 整数操作符 逻辑操作符 测试表达式的区别总结 Shell 条件判断之if语句 单分支 IF 条件 ...

  5. [转帖][Bash Shell] Shell学习笔记

    [Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html  阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...

  6. 刷题记录:[De1ctf] shell shell shell

    目录 刷题记录:[De1ctf] shell shell shell 一.知识点 1.源码泄露 2.正则表达式不完善导致sql注入 3.soapclient反序列化->ssrf 4.扫描内网 5 ...

  7. SDK/JDK,Shell/Shell脚本,Apache/APR ,MTK

    SDK 软件开发工具包(SoftwareDevelopmentKit) API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用 ...

  8. 以练代学之shell入门(一)

    5年前的时候,开始接触linux操作系统,接触的第一步就是学习shell脚本.用小脚本以连代学入了门. 1) 9*9乘法输出 2) 检验主机的服务是否启动 3) 冒泡排序 4) 备份当时team服务器 ...

  9. 『忘了再学』Shell基础 — 3、echo命令的介绍与使用

    目录 1.echo命令的作用 2.echo命令的基本用法 3.echo命令的-e选项用法 4.echo命令一些特殊用法 (1)输出字符带有字体颜色 (2)输出字符带有背景颜色 在讲Shell脚本之前, ...

随机推荐

  1. Unity3D开发入门教程(三)——添加启动脚本

    五邑隐侠,本名关健昌,12年游戏生涯. 本教程以 Unity 3D + VS Code + C# + tolua 为例. 一.启动脚本 第一篇 "搭建开发环境",在 "配 ...

  2. 《剑指offer》面试题29. 顺时针打印矩阵

    问题描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4 ...

  3. CAS基础

    有锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度延时,引起性能问题. (2)一个线程持有锁会导致其它所有需要此锁的线程挂起. (3)如果一个优先级高的线程等待一 ...

  4. GeoServer课程规划

    "凡事豫则立,不豫则废." --西汉·戴圣<礼记·中庸> 为了做好GeoServer课程培训,需要拟定一个课程目录,对整个课程做一个宏观上的规划.有了这个规划,就有了目 ...

  5. golang中通过递归或通道实现斐波那契数列

    1. 循环实现 package main import "fmt" func fibonacciFor(nums int) (s1 []int) { // 循环实现斐波那切数列 n ...

  6. IoC容器(底层原理)

    IoC(概念和原理) 1,什么是IoC (1)控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理 (2)使用IoC目的:为了降低耦合度 (3)做入门案例就是IoC实现 2,IoC底层原 ...

  7. 简单socket服务器编程

    package socket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; ...

  8. SAP下载报表速度慢?为啥你不试试python多线程

    由于SAP系统自身原因,或者公司内部ABAP代码的算法效率不高,我们经常遇到,手工执行某个事务代码下载某个报表会非常耗时,小爬曾见过公司某个自开发的报表,单家公司的数据下载超过半小时.如果我们刚好接到 ...

  9. Java 给Word每一页设置不同图片水印效果

    Word中设置水印时,可加载图片设置为水印效果,但通常添加水印效果时,会对所有页面都设置成统一效果,如果需要对每一页或者某个页面设置不同的水印效果,则可以参考本文中的方法.下面,将以Java代码为例, ...

  10. SpringBoot使用IDEA设置的外部Tomcat启动

    前言 使用springboot内嵌的tomcat启动是没问题,但是工程是要放到服务器上的tomcat的,所以springboot内嵌的能够启动,但不代表服务器的tomcat能启动起来,我就遇到了这个问 ...