自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)

循环语句

  • 1. 循环前先了解`echo`的使用
    • 1.1 `echo -n` 表示不换行输出
    • 1.2 `echo -e` 输出转义字符,将转义后的内容输出到屏幕上
      • 1.2.1 `\b ` 相当于退格键
      • 1.2.2 `\c ` 不换行输出
      • 1.2.3 `\n ` 换行输出
      • 1.2.4 `\f ` 、`\v` 换行输出
      • 1.2.5 `\t ` 制表符显示
      • 1.2.6 `\r ` 光标移至行首不换行
      • 1.2.7 `\\ ` 表示符号本身
      • 1.2.8 `echo` 的其他用法,删除和获取字符串的内容
  • 2. for循环
  • 3. while循环和until循环
  • 4. 嵌套循环
  • 5. 循环语句中的break、exit和continue
    • 5.1 break的使用
    • 5.2 exit的使用
    • 5.3 continue的使用

1. 循环前先了解echo的使用

1.1 echo -n 表示不换行输出

自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第1张图片

1.2 echo -e 输出转义字符,将转义后的内容输出到屏幕上

常见的转义字符有:

1.2.1 \b 相当于退格键

转义后相当于退格键(backspace),但是前提是“\b”存在字符。“\b”表示删除前一个字符,“\b\b”表示删除前面两个字符。
自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第2张图片

1.2.2 \c 不换行输出

不换行输出,在“\c”后面不存在字符的情况下,作用相当于echo -n,但是当“\b”后面仍然存在字符时,“\c”后面的字符将不会被输出。
在这里插入图片描述

1.2.3 \n 换行输出

换行输出,被输出的字符从"\n"出开始另起一行。
自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第3张图片

1.2.4 \f\v 换行输出

换行输出,但是换行后新行的开头位置连接着上一行的行尾。
自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第4张图片
“\v”的输出结果和“\f” 一样
自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第5张图片

1.2.5 \t 制表符显示

转义后表示插入横向制表符,即tab。
自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第6张图片

1.2.6 \r 光标移至行首不换行

光标移至行首,但是不换行,相当于使用“\r”之后的字符覆盖“\r”之前同等长度的字符,但是当“\r”后面不存在任何字符时,“\r”前面的字符不会被覆盖;当“\r”后面存在的字符大于前面时,“\r”前面的字符全部会被后面替代,按后面字符的长度。
自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第7张图片

1.2.7 \\ 表示符号本身

在转义符前面加入转义符,代表将后面的转义符转义为符号本身,也就是 \ 。
在这里插入图片描述
案例:使用echo直接将yum本地源的配置命令重定向到配置文件内。
自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第8张图片

1.2.8 echo 的其他用法,删除和获取字符串的内容

删除字符的方法:
自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第9张图片
截取字符的方法:
自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第10张图片
增加字符串的方法:
自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第11张图片

2. for循环

for循环经常使用在已经知道要进行多少次循环的场景

1.语法:

for  变量名  in  取值列表
do
	命令序列
done

自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第12张图片

2.练习
实例:循环出0到10之间(包括10)的整数
自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第13张图片
自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第14张图片

实例:由于系统上面的各种账号都是写在/etc/passwd内的第一个字段,通过管道命令cut识别出单纯的账号名称号,以id分别检查用户的标识符和特殊参数。知识点:截取文件的字段。这个操作还可以用在每个账号的删除。
自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第15张图片

3. while循环和until循环

while循环可以不断的执行某个程序,直到用户设置的条件完成为止,所以重点是条件,这种不定循环最常见的就是下面这两种格式了。
1.格式:
while循环:while的中文是【当…时】,所以这种方式说的是,当判断式/命令序列的条件成立时,就进行循环,直到命令序列/程序段落的条件不成立才停止。

while  [ 条件测试操作 ]
do						#do代表循环的开始
	判断式/命令序列
done 					#done代表循环的结束

until循环:这种方式恰恰和while循环相反,它指的是当判断式/命令序列的条件成立时,就终止循环,否则就会持续循环程序段落。

until  [ 条件测试操作 ]
do
	判断式/命令序列
done

自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第16张图片
2.实例
使用while完成猜数字游戏(0到1000之间的整数),可以通过RANDOM获取随机数,猜对结束,猜错继续。

#!/bin/bash

r_num=$[$RANDOM%1000]			<------生成随机数
count=0							<------用于记录输入次数,初始为0	
while true						<------使用不定循环while,(while true代表一直循环)
do
        read -p "请输入一个数字:" user_num				<------提示用户输入数字
        if [ $user_num -eq $r_num ]						<------如果判断成功然后执行下面的语句
        then
                echo 恭喜你猜对了!
                break									<------break可以跳出循环,后面再详细讲解
        elif [ $user_num -gt $r_num ]					<------输入小了进行提示
        then
                echo 你输入的数字太大了!
        else
                echo 你输入的数字太小了!					<------输入大了进行提示
        fi
        let count++										<------每输入一次将conut的值+1
done
        echo 你输入次数为:$count							<------统计的总数

自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第17张图片

实例:用户输入yes或者no的时候可以退出,否则会一直循环下去

#!/bin/bash

until [ "${yn}" == "yes" -o "${yn}" == "no" ]				<------条件为输入yes或者no,然后退出循环
do
        read -p "请输入yes执行程序/no停止程序: " yn			<------指定的代码块
done
~     

4. 嵌套循环

在循环内部再使用一个循环称为嵌套循环

1.格式:

#!/bin/bash
for ((i=1;i<5;i++))
do
        echo 此${
     i}为外部循环
        for((j=1;j<4;j++))
        do
                echo -e "\t此${j}为内部循环"
        done
done

自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第18张图片

5. 循环语句中的break、exit和continue

5.1 break的使用

当满足条件的情况下break会跳出当前循环体,如下

#!/bin/bash
for ((i=1;i<5;i++))
do      
        echo 此${
     i}为外部循环
        for((j=1;j<4;j++))
        do
            if [ $j -eq 3 ]			<------如果j的值为3
            then
                break				<------跳出当前循环(内部)
            fi  
        echo -e "\t此${j}为内部循环"
        done
done

自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第19张图片

5.2 exit的使用

当满足条件的情况下break会直接退出当前脚本,如下

#!/bin/bash
for ((i=1;i<5;i++))
do
        echo 此${
     i}为外部循环
        for((j=1;j<4;j++))
        do
            if [ $j -eq 3 ]					<------如果j的值为3
            then
                exit						<------结束当前脚本
            fi
        echo -e "\t此${j}为内部循环"
        done
done

在这里插入图片描述

5.3 continue的使用

continue中止某次循环中的命令,但不会完全中止整个命令,如下:

#!/bin/bash
for ((i=1;i<5;i++))
do
        echo 此${
     i}为外部循环
        for((j=1;j<4;j++))
        do
            if [ $j -eq 2 ]					<------如果j的值为2
            then
                continue					<------中止循环中本次的命令,但不会完全中止整个循环或脚本
            fi
        echo -e "\t此${j}为内部循环"
        done
done

自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)_第20张图片

你可能感兴趣的:(Linux系统,字符串,shell,linux,运维,服务器)