TypechoJoeTheme

MetMan's Blog

网站页面

Shell循环

MetMan博 主
2024-04-19
/
0 评论
/
103 阅读
/
415 个字
/
百度已收录
04/19
本文最后更新于 2024年08月02日,已超过 48天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

每一种编程语言中循环结构都是一个重要的语法,shell也不例外。

shell中循环结构包括:for循环、while循环以及until循环。

这里只介绍常用的for循环和while循环。

for循环

for循环用于对一个对象列表中每个元素重复执行操作,其中对象列表可以是数值列表、文件名列表或者命令行参数列表等。

for循环语法

for var in 对象列表
do 
   statements 
done

可以使用;将多行语句写到一行:

for var in 对象列表; do 
   statements 
done
或者
for var in 对象列表; do statements; done

shell还支持C语言风格的for循环

for ((exp1; exp2; exp3))
do
   statements 
done

常见用法:

  • 数值列表
for i in 1 2 3 4 5 6   # 循环6次
do 
    echo $i 
done

可以使用花括号展开生成数值列表

for i in {1..6}   
do 
    echo $i 
done

还可以使用seq生成数值列表

for i in `seq 1 6`   
do 
    echo $i 
done

等价于C风格for循环

for ((i=1; i<=6; i++))
do 
    echo $i
done

注:花括号展开还支持生成步长不为1的等距间隔列表

    for i in {1..9..2} # 1-9奇数  等价于 for i in `seq 1 2 9`
  • 文件名列表
for file in *.txt
do
  # process every file 
done
  • 遍历数组元素

Bash也支持数组变量,可以使用for循环对数组元素遍历。

years=(2010 2013 2020 2023)

for year in "${years[@]}"   # 数组元素列表
do
    echo $year
done
for i in "${!years[@]}"    # 数组元素个数,通过下标索引访问元素
do
    echo ${years[i]}
done

while循环

语法

while condition 
do 
    statements
done

判断条件condition与if语句中判断条件一样,可以是简单的命令列表,也可以使用test[]命令,也可以使用(())[[]]

示例:

  • 读取文件每一行内容
while read -r line  # 判断条件是普通命令
do 
    echo $line 
done < a.txt      

注意< a.txt必须放在done后面,如果放在read命令后面read -r line < a.txt会只读取第一行且进入死循环。

  • 通过管道方式读取文件:
cat a.txt | while read -r line 
do 
    echo $line 
done  
  • 查询slurm作业是否完成
query_job_max=300000   #定义查询作业最大次数
query_job=0
while [ $query_job -lt ${query_job_max} ] # 判断条件是test命令
do
    squeue | grep $jobid  # 查询作业队列中是否存在指定作业jobid
    if [ $? != 0 ]; then  
        echo Job $jobid has finished
        break   # break跳出while循环
    fi
    query_job=$((query_job+1))
    sleep 60
done
shellbash
朗读
赞(0)
赞赏
感谢您的支持,我会继续努力哒!
版权属于:

MetMan's Blog

本文链接:

https://blog.metman.top/index.php/archives/95/(转载时请注明本文出处及文章链接)

评论 (0)

互动读者

标签云

最新回复

暂无回复

登录
X
用户名
密码