当前位置: 首页 > news >正文

shell:使用结构化语句(for、while循环)

1. for命令

下面是bash shell中for命令的基本格式。

for var in list docommands
done

每次for命令遍历值列表,它都会将列表中的下个值赋给$test变量。$test变量可以像for 命令语句中的其他脚本变量一样使用。在最后一次迭代后,$test变量的值会在shell脚本的剩余 部分一直保持有效。它会一直保持最后一次迭代的值(除非你修改了它)。

$ cat for_test.sh
#!/bin/bash
for test in Alabama Alaska Arizona Arkansas California
doecho The text next state is $test
done
echo "The last state we visited was $test"
test=hello
echo "Wait, now we're visiting $test"$ bash for_test.sh
The text next state is Alabama
The text next state is Alaska
The text next state is Arizona
The text next state is Arkansas
The text next state is California
The last state we visited was California
Wait, now we're visiting hello

从变量中读取值

#!/bin/bash 13
# using a variable to hold the list
list="Alabama Alaska Arizona Arkansas Colorado"
list=$list" Connecticutfor state in $list
doecho "Have you ever visited $state?"
done

从命令中读取

$ cat test5
#!/bin/bash
# reading values from a file
file="states"
for state in $(cat $file)
doecho "Visit beautiful $state"
done

更改字段分隔符

特殊的环境变量IFS,叫作内部字段分隔符(internal field separator)IFS环境变量定义了bash shell用作字段分隔符的一系列字符。默认情况下,bash shell会将下列字 符当作字段分隔符:

  • 空格
  • 制表符
  • 换行符

可以在shell脚本中临时更改IFS环境变量的值来限制被bash shell当作字段 分隔符的字符。

IFS=$'\n'

用通配符读取目录

$ cat test6
#!/bin/bash
for file in /home/rich/test/*
doif [ -d "$file" ]thenecho "$file is a directory"elif [ -f "$file" ]thenecho "$file is a file"fi
done
$ ./test6
/home/rich/test/dir1 is a directory
/home/rich/test/myprog.c is a file
/home/rich/test/myprog is a file
/home/rich/test/myscript is a file
/home/rich/test/newdir is a directory
/home/rich/test/newfile is a file
/home/rich/test/newfile2 is a file
/home/rich/test/testdir is a directory
/home/rich/test/testing is a file
/home/rich/test/testprog is a file
/home/rich/test/testprog.c is a file

1.1 类C语言for语句

C语言风格的for命令看起来如下

for (( a = 1; a < 10; a++ )) 

注意,有些部分并没有遵循bash shell标准的for命令:

  • 变量赋值可以有空格;
  • 条件中的变量不以美元符开头;
  • 迭代过程的算式未用expr命令格式。

以下例子是在bash shell程序中使用C语言风格的for命令。

$ cat test8
#!/bin/bash
# testing the C-style for loop
for (( i=1; i <= 10; i++ ))
doecho "The next number is $i"
done
$ ./test8
The next number is 1
The next number is 2
The next number is 3
The next number is 4
The next number is 5
The next number is 6
The next number is 7
The next number is 8
The next number is 9
The next number is 10
$

2. while命令

while命令的格式是:

while testcommand doother commands
done

while命令的关键在于所指定的test command的退出状态码必须随着循环中运行的命令而
改变。如果退出状态码不发生变化, while循环就将一直不停地进行下去。

最常见的test command的用法是用方括号来检查循环命令中用到的shell变量的值。

$ cat test10
#!/bin/bash
# while command test
var1=10
while [ $var1 -gt 0 ]
do
echo $var1var1=$[ $var1 - 1 ]
done
$ ./test10
10
9
8
7 
6 
5
4 
3 
2 
1 
$
http://www.lryc.cn/news/385270.html

相关文章:

  • 数据结构_绪论
  • AI自动生成角色和情节连续的漫画,中山大学联想提出AutoStudio,可以多轮交互式连续生成并保持主题一致性。
  • 【经典面试题】RabbitMQ如何防止重复消费?
  • 如何自己录制教学视频?零基础也能上手
  • 【android】用 ExpandableListView 来实现 TreeView树形菜单视图
  • 策略模式与函数式编程应用
  • docker原理记录C-N-A
  • 【LeetCode】每日一题:二叉树的层次遍历
  • 单体架构改造为微服务架构之痛点解析
  • 马面裙的故事:汉服如何通过直播电商实现产业跃迁
  • SaaS产品运营:维护四个不同类型的合作伙伴的实战指南
  • 【监控】3.配置 Grafana 以使用 Prometheus 数据源
  • 【LinuxC语言】网络编程中粘包问题
  • Docker之jekins的安装
  • # bash: chkconfig: command not found 解决方法
  • Linux线程互斥锁
  • 展开说说:Android列表之RecyclerView
  • 等保2.0时,最常见的挑战是什么?
  • 基于Vue 3.x与TypeScript的PPTIST本地部署与无公网IP远程演示文稿
  • PHP的基本语法有哪些?
  • CSS的媒体查询:响应式布局的利器
  • 汇聚荣做拼多多运营第一步是什么?
  • NeRF从入门到放弃4: NeuRAD-针对自动驾驶场景的优化
  • docker环境部署ruoyi系统前后端分离项目
  • UI(二)控件
  • 【图像分类】Yolov8 完整教程 |分类 |计算机视觉
  • PyCharm 2024.1最新变化
  • 金融行业专题|某头部期货基于 K8s 原生存储构建自服务数据库云平台
  • DELL服务器 OpenManage监控指标解读
  • vscode下无法识别node、npm的问题