自动化运维必备之Shell脚本的循环语句,超详细讲解!

2023-05-16

Shell编程之循环语句


自动化运维必备之Shell脚本的循环语句,超详细讲解!

  • Shell编程之循环语句
  • 前言
  • 1. for循环
  • 3. while循环和until循环
  • 4. 嵌套循环
  • 5. 循环语句中的break、exit和continue
    • 5.1 break的使用
    • 5.2 exit的使用
    • 5.3 continue的使用
  • 总结


前言


1. for循环

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

语法:

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

3. while循环和until循环

  • while循环可以不断的执行某个程序,直到用户设置的条件完成为止,所以重点是条件,这种不定循环最常见的就是下面这两种格式了。

格式:

while循环:while的中文是【当…时】,所以这种方式说的是,当判断式/命令序列的条件成立时,就进行循环,直到命令序列/程序段落的条件不成立才停止。

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

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

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

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				<------统计的总数

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

#!/bin/bash

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

4. 嵌套循环

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

格式:

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

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

5.2 exit的使用

  • 当满足条件的情况下exit会直接退出当前脚本,如下:
#!/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

总结

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动化运维必备之Shell脚本的循环语句,超详细讲解! 的相关文章

  • k8s CronJob 在 pod 列表上循环

    我想在特定命名空间中的 pod 上运行循环 但诀窍是在 cronJob 中执行此操作 是否可以内联 kubectl get pods n foo 这里的技巧是在你获得 Pod 列表后 我需要循环并在 15 秒的超时时间内将每个 Pod 删除
  • 从 GNU Makefile 调用 `command -v find`

    我使用 shell bash 但我需要可移植性 和 GNU Makefile 我有这个代码 check commands command v find gt dev null command v asdf gt dev null 正如假设的
  • 如何编写bash脚本来设置全局环境变量?

    最近写了一个设置环境变量的脚本 看一下 bin bash echo Pass a path read path echo path defaultPath home whoami Desktop if n path then export
  • 使用终端(或 Shell)将文件的一部分复制/粘贴到另一个文件中

    我正在尝试将 txt 文件的一部分从行号 n 复制到行号 n y 假设 1000 到 1000000 我尝试过与运营商合作sed 并且失败了 这是我尝试过的命令 sed n 1000 1000000p path first file gt
  • 从 Jenkins Pipeline 捕获 shell 脚本输出

    我正在尝试提取 git 分支并在 Jenkinsfile 中提交信息 如下所示 def commit sh returnStdout true script git rev parse HEAD trim def branch sh ret
  • 编写健壮的 shell 脚本有哪些规则?

    I recently erased part of my home directory with a shell script I wrote Fortunately I did hit Ctrl C fast enough to avoi
  • 在 unix bash 脚本中可以嵌套 Here Document 吗?

    是否可以在另一个heredoc中编写一个heredoc ssh T q yxz server1 lt lt END TEXT ssh T q abc server2 lt lt SUB TEXT SUB TEXT END TEXT Yes
  • linux + ksh + 向下舍入或向上舍入 - 浮点数

    在我的 ksh 脚本中 我只需要计算整数 有时我会得到浮点数 例如 3 49 或 4 8 等 所以我需要根据以下规则将浮点数转换为整数 示例 3 49 will be 3 2 9 will be 3 4 1 will be 4 23 51
  • Linux shell 根据第二列对文件进行排序?

    我有一个这样的文件 FirstName FamilyName Address PhoneNumber 如何按 FamilyName 排序 如果这是 UNIX sort k 2 file txt 您可以使用多个 k用于对多列进行排序的标志 例
  • 何时用引号将 shell 变量括起来?

    我应该或不应该在 shell 脚本中用引号括住变量吗 例如 下列说法正确的是 xdg open URL eq 2 or xdg open URL eq 2 如果是这样 为什么 一般规则 如果它可以为空或包含空格 或实际上任何空格 或特殊字符
  • 如何获取与 shell 中的文件名模式匹配的所有文件的总文件大小?

    我正在尝试仅使用 shell 来计算与文件名模式匹配的所有文件 在目录树中 的总大小 以字节为单位 这是我到目前为止所拥有的 find name undo exec stat c s awk 总计 1 END 打印总计 有没有更简单的方法来
  • Git - 显示远程分支的远程名称

    是否有一个 Git 命令可以显示远程分支的远程名称 目前 我坚持使用 shell utils 从远程分支引用中提取远程名称 例如 echo remote name branch name sed r s 1 remote name 有时出于
  • Linux shell 从用户输入中获取设备 ID

    我正在为一个程序编写安装脚本 该程序需要在其配置中使用 lsusb 的设备 ID 因此我正在考虑执行以下操作 usblist lsusb put the list into a array for each line use the arr
  • Python 脚本:每次打印新行到 shell,而不是更新现有行

    说到Python 我是个菜鸟 我有一个 python 脚本 它给我这样的输出 last ZVZX W3vo9I Downloading video webpage last ZVZX W3vo9I Extracting video info
  • VBA Shell 并等待退出代码

    我正在打包一个办公应用程序 VBA 它调用 C 控制台应用程序来执行应用程序 大型模拟程序 的一些繁重工作 我希望能够让 VBA 应用程序等待控制台应用程序完成并从控制台应用程序检索退出代码 我已经能够做到前者 但尚未能够从应用程序中检索退
  • 类似 jq 中的 sql join

    我有以下 json id 1 type folder title folder 1 id 2 type folder title folder 2 id 3 type item title item 1 folder 1 id 4 type
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • shell中如何分割字符串

    我有一个变量作为 string ABC400p2q4 我怎样才能分开ABC400 and p2q4 我需要将它分成两个变量 结果我得到 echo var1 ABC400 echo var2 p2q4 可以用任何字母字符代替 ABC 可以用任
  • 如何从 LaTeX 执行 shell 脚本?

    我正在尝试在 LaTeX 中执行以下操作 documentclass article begin document execute usr local bin my shell script sh end document 想法是执行 us
  • 在 VBA 中捕获 shell 命令的输出值?

    发现这个功能http www cpearson com excel ShellAndWait aspx http www cpearson com excel ShellAndWait aspx 但我还需要捕获 shell 的输出 有什么代

随机推荐