Linux shell编程学习笔记17:for循环语句

Linux Shell 脚本编程和其他编程语言一样,支持算数、关系、布尔、字符串、文件测试等多种运算,同样也需要进行根据条件进行流程控制,提供了if、for、while、until等语句。 
之前我们探讨了if语句,现在我们来探讨for循环语句。

Linux Shell中的for语句十分灵活,格式多样,我们通过实例看看一些常用的格式。

一、数字条件类循环

(一)格式1:C语言风格

# csdn @ edu in ~ [22:14:49] 
$ for (( i=1; i <=10; i++));  do           
for> echo "$i * 2 = $(expr $i \* 2)";      
for> done      
1 * 2 = 2
2 * 2 = 4
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
7 * 2 = 14
8 * 2 = 16
9 * 2 = 18
10 * 2 = 20

# csdn @ edu in ~ [22:15:25] 

(二)格式2:in + 完整数列

1.在zsh中 

# csdn @ edu in ~ [23:22:07] C:127
$ for i in 1 2 3 4 5 6 7 8 9 10; do                                       
for> echo "$i * 2 = $(expr $i \* 2)";       
for> done                                                                    
1 * 2 = 2
2 * 2 = 4
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
7 * 2 = 14
8 * 2 = 16
9 * 2 = 18
10 * 2 = 20

# csdn @ edu in ~ [23:22:44] 

2.在bash中

[csdn ~]$ for i in 1 2 3 4 5 6 7 8 9 10; do echo "$i * 2 = $(expr $i \* 2)";  done
1 * 2 = 2
2 * 2 = 4
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
7 * 2 = 14
8 * 2 = 16
9 * 2 = 18
10 * 2 = 20
[csdn ~]$  

 

 (三)格式3:使用 in + seq集合

# csdn @ edu in ~ [23:27:05] 
$ for i in $(seq 1 10) ; do
for> echo "$i * 2 = $(expr $i \* 2)"; 
for> done
1 * 2 = 2
2 * 2 = 4
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
7 * 2 = 14
8 * 2 = 16
9 * 2 = 18
10 * 2 = 20

# csdn @ edu in ~ [23:28:42] 

(四)格式4:用 in + {..}集合

1.多余空格导致错误

# csdn @ edu in ~ [23:36:02] 
$ for i in {1..10};  do
zsh: command not found:  do
zsh: command not found:  do
zsh: command not found:  do
zsh: command not found:  do
zsh: command not found:  do
zsh: command not found:  do
zsh: command not found:  do
zsh: command not found:  do
zsh: command not found:  do
zsh: command not found:  do

导致出错的原因是命令

for i in {1..10};  do

中的 }; 和行末的 do 之间多放了几个空格,只需要一个空格就行。

2.正确的格式

# csdn @ edu in ~ [23:36:09] C:127
$ for i in {1..10}; do 
for> echo "$i * 2 = $(expr $i \* 2)";
for> done
1 * 2 = 2
2 * 2 = 4
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
7 * 2 = 14
8 * 2 = 16
9 * 2 = 18
10 * 2 = 20

# csdn @ edu in ~ [23:36:47] 

 (五)格式5:在awk中应用

# csdn @ edu in ~ [22:41:42] 
$ awk 'BEGIN {for( i=1; i<=10; i++ ) print i "*2=" i*2}'
1*2=2
2*2=4
3*2=6
4*2=8
5*2=10
6*2=12
7*2=14
8*2=16
9*2=18
10*2=20

# csdn @ edu in ~ [22:41:57] 

二、字符条件类循环

(一)格式1:in 字符串

1.在bash中有效

[csdn ~]$ s="b d 3";for i in $s; do if [[ $i > 'a' && $i < 'z' ]]; then echo $i is a lowercase letter; else echo $i is not a letter; fi; done
b is a lowercase letter
d is a lowercase letter
3 is not a letter
[csdn ~]$  

 2.在zsh中无效 

[csdn ~]$ exec zsh

# csdn @ edu in ~ [14:00:44] 
$ s="b d 3";for i in $s; do if [[ $i > 'a' && $i < 'z' ]]; then echo $i is a lowercase letter; else echo $i is not a letter; fi; done
b d 3 is a lowercase letter

# csdn @ edu in ~ [14:00:55] 

(二)格式1:in 字符1 字符2 …… 字符n

1.在bash中部分有效

# csdn @ edu in ~ [14:26:43] 
$ exec bash
[csdn ~]$ for i in 'b' 'd' '3'; do if [[ $i > 'a' && $i < 'z' ]]; then echo $i is a lowercase letter; else echo $i is not a letter; fi; done
b is a lowercase letter
d is a lowercase letter
3 is not a letter
[csdn ~]$ for i in b d 3; do if [[ $i > 'a' && $i < 'z' ]]; then echo $i is a lowercase letter; else echo $i is not a letter; fi; done 

> ^C
[csdn ~]$ for i in 'b d 3'; do if [[ $i > 'a' && $i < 'z' ]]; then echo $i is a lowercase letter; else echo $i is not a letter; fi; done ; 
> ^C
[csdn ~]$ for i in "b d 3"; do if [[ $i > 'a' && $i < 'z' ]]; then echo $i is a lowercase letter; else echo $i is not a letter; fi; done ; 
> ^C
[csdn ~]$ for i in "b d 3"; do if [[ $i > 'a' && $i < 'z' ]]; then echo $i is a lowercase letter; else echo $i is not a letter; fi; done 
> ^C
[csdn ~]$ 

2.在zsh中有效

# csdn @ edu in ~ [14:24:52] 
$ for i in 'b' 'd' '3'; do if [[ $i > 'a' && $i < 'z' ]]; then echo $i is a lowercase letter; else echo $i is not a letter; fi; done
b is a lowercase letter
d is a lowercase letter
3 is not a letter

# csdn @ edu in ~ [14:25:11] 
$ for i in b d 3; do if [[ $i > 'a' && $i < 'z' ]]; then echo $i is a lowercase letter; else echo $i is not a letter; fi; done 
b is a lowercase letter
d is a lowercase letter
3 is not a letter

# csdn @ edu in ~ [14:26:43] 

(三)格式3:in {..}

1.在bash中有效

[csdn ~]$ for i in {b..d}; do
>   if [[ $i > 'a' && $i < 'z' ]]; then
>    echo "$i is a letter";
>   else
>    echo "$i is not a letter";
>   fi;
> done
b is a letter
c is a letter
d is a letter
[csdn ~]$ 

或者

for i in {b..d}; do if [[ $i > 'a' && $i < 'z' ]]; then echo "$i is a letter"; else echo "$i is not a letter"; fi; done

 这条命令在csdn的linux学习环境中显示如下:

2.在zsh中无效

[csdn ~]$ exec zsh

# csdn @ edu in ~ [21:58:49] 
$ for i in {b..d}; do
for>   if [[ $i > 'a' && $i < 'z' ]]; then
for then>    echo "$i is a letter";
for then>   else
for else>    echo "$i is not a letter";
for else>   fi;
for> done
{b..d} is not a letter

# csdn @ edu in ~ [21:59:03] 

 

  

(四) in [ 字母1,字母n ]

注意: [后面和] 的前面加了空格

1.在bash中

[csdn ~]$ for i in [ b,d ]; do
>   if [[ $i > 'a' && $i < 'z' ]]; then
>    echo "$i is a letter";
>   else
>    echo "$i is not a letter";
>   fi;
> done
[ is not a letter
b,d is a letter
] is not a letter
[csdn ~]$  

2.在zsh中

# csdn @ edu in ~ [23:08:28] 
$ for i in [ b,d ]; do
for>   if [[ $i > 'a' && $i < 'z' ]]; then
for then>    echo "$i is a letter";
for then>   else
for else>    echo "$i is not a letter";
for else>   fi;
for> done
[ is not a letter
b,d is a letter
] is not a letter

# csdn @ edu in ~ [23:12:14] 

(五) in [ 字母1 , 字母n ]

注意:[ 字母1 , 字母n ] 之间均有空格间隔。

1.在bash中

[csdn ~]$ for i in [ b , d ]; do
>   if [[ $i > 'a' && $i < 'z' ]]; then
>    echo "$i is a letter";
>   else
>    echo "$i is not a letter";
>   fi;
> done
[ is not a letter
b is a letter
, is not a letter
d is a letter
] is not a letter
[csdn ~]$ 

2.在zsh中

[csdn ~]$ exec zsh

# csdn @ edu in ~ [23:08:21] 
$ for i in [ b , d ]; do
for>   if [[ $i > 'a' && $i < 'z' ]]; then
for then>    echo "$i is a letter";
for then>   else
for else>    echo "$i is not a letter";
for else>   fi;
for> done
[ is not a letter
b is a letter
, is not a letter
d is a letter
] is not a letter

(六)一些无效的格式

1.in 字母1-字母n

(1)在basth中

# csdn @ edu in ~ [22:36:03] 

$ exec bash
[csdn ~]$ for i in b-d; do
>   if [[ $i > 'a' && $i < 'z' ]]; then
>    echo "$i is a letter";
>   else
>    echo "$i is not a letter";
>   fi;
> done
b-d is a letter
[csdn ~]$ 

(2)在zsh中

# csdn @ edu in ~ [22:01:51] 
$ for i in b-d; do  
  if [[ $i > 'a' && $i < 'z' ]]; then
   echo "$i is a letter";
  else
   echo "$i is not a letter";
  fi;
done
b-d is a letter

# csdn @ edu in ~ [22:02:09] 

2. in [字母1-字母n]

(1)在bash中

[csdn ~]$ for i in [b-d]; do
>   if [[ $i > 'a' && $i < 'z' ]]; then
>    echo "$i is a letter";
>   else
>    echo "$i is not a letter";
>   fi;
> done
[b-d] is a letter

(2)在zsh中

# csdn @ edu in ~ [22:25:27] 
$ for i in [b-d]; do
for>   if [[ $i > 'a' && $i < 'z' ]]; then
for then>    echo "$i is a letter";
for then>   else
for else>    echo "$i is not a letter";
for else>   fi;
for> done
zsh: no matches found: [b-d]

# csdn @ edu in ~ [22:28:11] 

3. in [字母1,字母n]

(1)在bash中


[csdn ~]$ for i in [b,d]; do
>   if [[ $i > 'a' && $i < 'z' ]]; then
>    echo "$i is a letter";
>   else
>    echo "$i is not a letter";
>   fi;
> done
[b,d] is a letter
[csdn ~]$ 

 

 (2)在zsh中

# csdn @ edu in ~ [22:29:14] 
$ for i in [b,d]; do
for>   if [[ $i > 'a' && $i < 'z' ]]; then
for then>    echo "$i is a letter";
for then>   else
for else>    echo "$i is not a letter";
for else>   fi;
for> done
zsh: no matches found: [b,d]

# csdn @ edu in ~ [22:33:29] 


 

4. in '字母1-字母n'

(1)在bash中 

[csdn ~]$ for i in 'b-d'; do
>   if [[ $i > 'a' && $i < 'z' ]]; then
>    echo "$i is a letter";
>   else
>    echo "$i is not a letter";
>   fi;
> done
b-d is a letter
[csdn ~]$ 

 (2)在zsh中

# csdn @ edu in ~ [22:33:29] 
$ for i in 'b-d'; do
for>   if [[ $i > 'a' && $i < 'z' ]]; then
for then>    echo "$i is a letter";
for then>   else
for else>    echo "$i is not a letter";
for else>   fi;
for> done
b-d is a letter

# csdn @ edu in ~ [22:36:03] 

5. in '字母1'-'字母n'

(1)在bash中

[csdn ~]$ for i in 'b'-'d'; do
>   if [[ $i > 'a' && $i < 'z' ]]; then
>    echo "$i is a letter";
>   else
>    echo "$i is not a letter";
>   fi;
> done
b-d is a letter
[csdn ~]$ 

 

(2)在zsh中

# csdn @ edu in ~ [22:46:27] 
$ for i in 'b'-'d'; do
for>   if [[ $i > 'a' && $i < 'z' ]]; then
for then>    echo "$i is a letter";
for then>   else
for else>    echo "$i is not a letter";
for else>   fi;
for> done
b-d is a letter

# csdn @ edu in ~ [22:46:35] 

6.in ['字母1'-'字母n']

(1)在bash中

# csdn @ edu in ~ [22:51:56] 
$ exec bash
[csdn ~]$ for i in ['b'-'d']; do
>   if [[ $i > 'a' && $i < 'z' ]]; then
>    echo "$i is a letter";
>   else
>    echo "$i is not a letter";
>   fi;
> done
[b-d] is a letter
[csdn ~]$ 

(2)在zsh中

# csdn @ edu in ~ [22:51:06] 
$ for i in ['b'-'d']; do
for>   if [[ $i > 'a' && $i < 'z' ]]; then
for then>    echo "$i is a letter";
for then>   else
for else>    echo "$i is not a letter";
for else>   fi;
for> done
zsh: no matches found: [b-d]

# csdn @ edu in ~ [22:51:56] 

三、文件和目录类循环操作

 (一)实例1:列出根目录/下的内容,判断其是文件还是目录并输出

# csdn @ edu in ~ [11:39:57] C:1
$ cd /

# csdn @ edu in / [11:40:01] 
$ ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

# csdn @ edu in / [11:40:04] 
$ for i in `ls`; do if [ -f $i ]; then echo $i is a file\! ; elif [ -d $i ]; then echo $i is a directory\! ; else echo $i is other file\!; fi; done
anaconda-post.log is a file!
bin is a directory!
dev is a directory!
etc is a directory!
home is a directory!
lib is a directory!
lib64 is a directory!
media is a directory!
mnt is a directory!
opt is a directory!
proc is a directory!
root is a directory!
run is a directory!
sbin is a directory!
srv is a directory!
sys is a directory!
tmp is a directory!
usr is a directory!
var is a directory!

# csdn @ edu in / [11:43:15] 

 

我们使用 cd / 命令让根目录/变成当前目录,然后用引用符(Esc键下面的`) 将ls命令获取的根目录/内容作为循环变量用if语句进行判断处理:

用 -f判断是否为文件,如果是文件就输出文件名称并注明is a file

否则用 -d判断是否为目录 ,如果是目录就输出目录名称并注明is a directory

否则就输出文件名称并注明is other file

需要注意的是,我们用引用符(Esc键下面的`) 来引有ls命令获取的根目录/内容。

(二)列出当前目录下的.sh文件名并输出提示is a shell script file !

# csdn @ edu in ~ [14:03:58] 
$ ls *.sh  
zsh: no matches found: *.sh

# csdn @ edu in ~ [14:05:37] C:1
$ echo "hello" > hello.sh

# csdn @ edu in ~ [14:05:55] 
$ cat hello.sh
hello

# csdn @ edu in ~ [14:06:02] 
$ for f in $(ls *.sh);do echo $f is a shell script file \! ; done  
hello.sh is a shell script file !

# csdn @ edu in ~ [14:07:16] 

在上面的实例中,我们先用ls命令检查,发现当前目录下没有.sh文件

然后 我们用输出重定向创建了一个hello.sh

接着我们用for语句列出当前目录下的.sh文件名,并输出提示is a shell script file !

这里我们同样是引入了ls命令执行的结果,但引用的方法跟 (一)实例1:列出根目录/下的内容,判断其是文件还是目录并输出里不同,大家可以对比一下这两种方法 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/109460.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

rem设置 vscode设置rem 适配 px转rem

1、下载安装 2、 二、 如果代码里面设置 就按代码里面来 -- 20 代码: // 基准大小 const baseSize 20 // 设置 rem 函数 function setRem() {// 当前页面宽度相对于 750 宽的缩放比例&#xff0c;可根据自己需要修改。const scale document.documentElement.clientWidth / …

学会吃亏,也是善良

《六祖坛经》上说&#xff1a;一切福田&#xff0c;都离不开心地。 心田上播下善良的种子&#xff0c;总有一天&#xff0c;会开花结果。 所以&#xff0c;心地善良是一种福祉&#xff0c;是对生命最好的感恩与回报&#xff0c;心存善念&#xff0c;便是最好的修行&#xff01;…

【Java每日一题】——第四十三题:编程用多态实现打印机.。分为黑白打印机和彩色打印机,不同类型的打印机打印效果不同。(2023.10.30)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

RK3568-适配at24c04模块

将at24c04模块连接到开发板i2c2总线上 i2ctool查看i2c2总线上都有哪些设备 UU表示设备地址的从设备被驱动占用,卸载对应的驱动后,UU就会变成从设备地址。at24c04模块设备地址 0x50和0x51是at24c04模块i2c芯片的设备地址。这个从芯片手册上也可以得知。A0 A1 A2表示的是模块对…

【鸿蒙软件开发】ArkTS基础组件之Select(下拉菜单)、Slider(滑动条)

文章目录 前言一、Select下拉菜单1.1 子组件1.2 接口参数 1.3 属性1.4 事件1.5 示例代码 二、Slider2.1 子组件2.2 接口参数&#xff1a;SliderStyle枚举说明 2.3 属性2.4 事件SliderChangeMode枚举说明 2.5 示例代码 总结 前言 Select组件&#xff1a;提供下拉选择菜单&#…

地球系统模式CESM

目前通用地球系统模式&#xff08;Community Earth System Model&#xff0c;CESM&#xff09;在研究地球的过去、现在和未来的气候状况中具有越来越普遍的应用。CESM由美国NCAR于2010年07月推出以来&#xff0c;一直受到气候学界的密切关注。近年升级的CESM2.0在大气、陆地、海…

Linux高级命令(扩展)

一、find命令 1、find命令作用 在Linux操作系统中&#xff0c;find命令主要用于进行文件的搜索。 2、基本语法 # find 搜索路径 [选项 选项的值] ... 选项说明&#xff1a; -name &#xff1a;根据文件的名称搜索文件&#xff0c;支持*通配符 -type &#xff1a;f代表普通文…

基于小安派AiPi-Eye-S1的Nes游戏机

1.作品展示 作品功能可见以下B站视频 外壳可以使用灰太狼大佬提供的外壳STL文件。在嘉立创三维猴上打印&#xff08;外壳12元快递6元&#xff09;。 外壳从以下的帖子中获取&#xff1a; 模型分享 2.作品说明 2.1 硬件部分 硬件上使用到了AiPi-Eye-S1开发板以及3.5寸 240*3…

ElasticSearch快速入门实战

全文检索 什么是全文检索 全文检索是一种通过对文本内容进行全面索引和搜索的技术。它可以快速地在大量文本数据中查找包含特定关键词或短语的文档&#xff0c;并返回相关的搜索结果。全文检索广泛应用于各种信息管理系统和应用中&#xff0c;如搜索引擎、文档管理系统、电子…

安防监控项目---CGI接口的移植和使用

文章目录 前言一、CGI二、CGI的具体移植步骤2.1 cgi源码下载2.2 搭建交叉编译环境2.3 注意事项 三、测试结果总结 前言 书接上期&#xff0c;上期与大家分享的是boa服务器的移植&#xff0c;那么几天要和大家介绍的呢是一款接口&#xff0c;哈哈哈&#xff0c;用起来也是有点难…

NSS刷题 js前端修改 os.path.join漏洞

打算刷一遍nssweb题&#xff08;任重道远&#xff09; 前面很简单 都是签到题 这里主要记录一下没想到的题目 [GDOUCTF 2023]hate eat snake 这里 是对js的处理 有弹窗 说明可能存在 alert 我们去看看js 这里进行了判断 如果 getScore>-0x1e9* 我们结合上面 我觉得是6…

人工智能基础_机器学习008_使用正规方程_损失函数进行计算_一元一次和二元一次方程演示_sklearn线性回归演示---人工智能工作笔记0048

自然界很多都是正态分布的,身高,年龄,体重...但是财富不是. 然后我们来看一下这个y = wx+b 线性回归方程. 然后我们用上面的代码演示. 可以看到首先import numpy as np 导入numby 数据计算库 import matplotlib.pyplot as plt 然后导入图形画的库 然后: X = np.linspace(0,…

文件正在使用,操作无法完成。windows查看占用文件的程序

查看占用 tasklist /m IDMShellExt64.dll 映像名称 PID 模块explorer.exe 7452 IDMShellExt64.dll杀死进程 taskkill /f /PID 7452 成功: 已终止 PID 为 7452 的进程。重启explorer explorer

20.3 OpenSSL 对称AES加解密算法

AES算法是一种对称加密算法&#xff0c;全称为高级加密标准&#xff08;Advanced Encryption Standard&#xff09;。它是一种分组密码&#xff0c;以128比特为一个分组进行加密&#xff0c;其密钥长度可以是128比特、192比特或256比特&#xff0c;因此可以提供不同等级的安全性…

OpenCV—自动驾驶实时道路车道检测(完整代码)

自动驾驶汽车是人工智能领域最具颠覆性的创新之一。在深度学习算法的推动下,它们不断推动我们的社会向前发展,并在移动领域创造新的机遇。自动驾驶汽车可以去传统汽车可以去的任何地方,并且可以完成经验丰富的人类驾驶员所做的一切。但正确地训练它是非常重要的。自动驾驶汽…

计算机考研 | 2013年 | 计算机组成原理真题

文章目录 【计算机组成原理2013年真题43题-9分】【第一步&#xff1a;信息提取】【第二步&#xff1a;具体解答】 【计算机组成原理2013年真题44题-14分】【第一步&#xff1a;信息提取】【第二步&#xff1a;具体解答】 【计算机组成原理2013年真题43题-9分】 某32位计算机&a…

sql-50练习题6-10

sql练习题6-10题 前言数据库表结构介绍学生表课程表成绩表教师表 0-6 查询"李"姓老师的数量0-7 查询学过"李四"老师授课的同学的信息0-8 查询没学过"李四"老师授课的同学的信息0-9 查询学过编号为"01"并且也学过编号为"02"的…

SMART PLC梯形速度曲线轨迹规划(追剪从轴控制)

在介绍本专栏之前,大家可以参考另一篇博图PLC的梯形加减速点动功能块介绍文章 梯形加减速点动功能块(博途SCL)_RXXW_Dor的博客-CSDN博客文章浏览阅读184次。SMART PLC斜坡函数SMART PLC斜坡函数功能块(梯形图代码)_RXXW_Dor的博客-CSDN博客斜坡函数Ramp的具体应用可以参看下…

港联证券:注册制意味着什么?

跟着我国本钱商场变革的不断深化&#xff0c;注册制在近年来成为了备受关注的论题。注册制的施即将改动原有的核准原则&#xff0c;关于股票和债券的发行&#xff0c;将由事后监管转变为事前挂号审理。那么&#xff0c;注册制意味着什么呢&#xff1f;本文将从经济、商场和出资…

[云原生案例1.] 构建LNMP架构并运行Wordpress个人博客平台

文章目录 1. 当前需求2. 前置准备3. 搭建过程3.1 创建自定义网络3.2 部署并配置nginx3.2.1 创建工作目录并上传相关软件包3.2.2 解压缩相关软件包3.2.3 编写Dockerfile文件3.2.4 编写nginx.conf文件3.2.5 创建nginx镜像3.2.6 运行容器 3.3 部署并配置mysql3.3.1 创建工作目录3.…
最新文章