shell 循环结构[通俗易懂]

shell 循环结构[通俗易懂]前言循环结构在编程中十分常见,也是程序中是较为重要的一部分,在bash中有for,until,while这三种语句可以进行重复执行部分程序流程,下面会进一步讨论这三个指令的使用以及注意事项forbash中for命令允许用户创建遍历一个系列值的循环,在循环中,建议执行预先设定好的程序或命令。for的基本格式如下:forvalinlistdo#TODO…

大家好,又见面了,我是你们的朋友全栈君。

前言

循环结构在编程中十分常见,也是程序中是较为重要的一部分,在bash中有 foruntilwhile 这三种语句可以进行重复执行部分程序流程,下面会进一步讨论这三个指令的使用以及注意事项

for

bash中for命令允许用户创建遍历一个系列值的循环,在循环中,建议执行预先设定好的程序或命令。for的基本格式如下:

for  val in list
do
    #TODO 
    #commands
done

下面写几个简单的脚本熟悉一下for的用法。

1 从列表中读取

#!/bin/bash
for i in A B C D E F G
do
        echo "i is: $i"
done

i is: A
i is: B
i is: C
i is: D
i is: E
i is: F
i is: G

2 从命令中读取

#!/bin/bash
val=`ls -l /`
for files in $val
do
        echo "output: $files"
done

这里将根目录下的文件列表已经文件属性打印出来,由于默认分隔符号是空格,所以打印的结果如下,由于内容较多,已经省略大部分内容;

output: 总用量
output: 108
output: drwxr-xr-x
output: 2
output: root
output: root
output: 4096
output: 6月
output: 24
output: 20:53
output: bin
output: drwxr-xr-x
output: 4
output: root
output: root
output: 4096
output: 8月
output: 26
output: 06:28
output: boot
output: drwxrwxr-x

3 自定义分隔符

使用环境变量IFS可以将分隔符定义为用户想要使用的分隔符;

#!/bin/bash
val=`ls -l /`

#将分隔符号换成换行符
IFS=$'\n'
for files in $val
do
        echo "output: $files"
done

output: 总用量 108
output: drwxr-xr-x 2 root root 4096 6月 24 20:53 bin
output: drwxr-xr-x 4 root root 4096 8月 26 06:28 boot
output: drwxrwxr-x 2 root root 4096 6月 24 00:07 cdrom
output: drwxr-xr-x 19 root root 4220 8月 25 20:23 dev

4 双括号下的for命令

bash shell 中可以使用C语言风格的for命令;下例简单实现了求1+2+3+…+100的和。

#!/bin/bash
sum=0
for (( i=0; i<=100; i++ ))
do
        sum=$(( $sum + $i ))

done
echo $sum

5050

while

bash shell 中的while命令会测试判断当前的cmd是否返回正确值,当前cmd是否成立,如果成立,则执行循环体内的命令,while命令的基本格式如下:

while test cmd
do
    #TODO
    #commands
done

通过while简单实现1至100的求和公式;

#!/bin/bash
i=0
sum=0
while [ $i -le 100 ]
do
        sum=$(($i+$sum))
        i=$(( $i+1 ))
done
echo $sum

5050

until

until命令与while命令恰恰相反,当cmd命令不成立的时候,则执行循环体内部的指令,until命令的基本格式如下:

until test cmd
do
    #TODO
    #commands
done

通过until简单实现1至100的求和公式;

#!/bin/bash 
i=0
sum=0
until [ $i -gt 100 ]
do
        sum=$(($i+$sum))
        i=$(($i+1))
done
echo $sum
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163966.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MATLAB插值函数interp1

    MATLAB插值函数interp1插值法    插值法又称“内插法”,是利用函数f(x)在某区间中已知的若干点的函数值,作出适当的特定函数,在区间的其他点上用这特定函数的值作为函数f(x)的近似值,这种方法称为插值法。如果这特定函数是多项式,就称它为插值多项式。线性插值法    线性插值法是指使用连接两个已知量的直线来确定在这两个已知量之间的一个未知量的值的方法。    

    2022年6月13日
    30
  • java中数组的最大下标是_c语言中数组下标从几开始

    java中数组的最大下标是_c语言中数组下标从几开始packagepractice;publicclassExtremeValueAndIndex{ publicstaticvoidmain(String[]args){ intnumberArr[]={7,3,5,1,8,4}; intmax=numberArr[0],min=numberArr[0]; intmaxIndex=0,minIndex=0; for(inti=1;i<numberArr.

    2022年10月11日
    0
  • 【云原生 • Kubernetes】搭建 k8s 集群(Kubeadm 方式)[通俗易懂]

    【云原生 • Kubernetes】搭建 k8s 集群(Kubeadm 方式)[通俗易懂]kubeadm方式搭建k8s集群,包含详细步骤及解析。

    2022年10月15日
    0
  • 电平转换芯片使用_i2c电平转换芯片

    电平转换芯片使用_i2c电平转换芯片设计GPS模组电路时,需要转换电平,设计采用TXS0104E转换电平

    2022年8月10日
    3
  • GPS模块开发详解(转)

    一、了解硬件我使用的GPS模块型号为UBX-M8030参看:UBX-M8030系列参看:UBX-M8030datasheet1、查看一下它的特性:多用途GNSS芯片,提供三种产品等级最多可并发接收3个GNSS(GPS、伽利略、GLONASS、北斗)行业领先的-167dBm导航灵敏度业界最低电流消耗在城市峡谷中具有绝佳的定位精度安全性和完整性保护支持所有…

    2022年4月4日
    29
  • 批处理文件中%~dp0是什么意思?

    批处理文件中%~dp0是什么意思?看批处理文件时,常遇到%~dp0之类的东西,不知其意思。打开WindowsXP自带的帮助系统,搜索“batch”关键字,能找到有关介绍批处理文件的帮助。通过帮助我终于明白了%~dp0是什么意思,总结如下:    我们知道,%*是用来指批处理文件传入的参数。例如%0表

    2022年9月2日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号