Linux shell之循环使用案例

声明与简介

Shell是系统的用户界面,它提供了用户跟内核进行交互的桥梁。Shell是一个命令解释器,它接收用户输入的命令并送到内核去执行。
本文主要介绍围绕Shell循环的常见使用方法。

循环控制

for循环

For循环是以for为关键字,访问列表进行进行遍历的一种简单的循环方式。
默认情况下遍历元素时以空格来分割。

# 通过for循环遍历所有元素
for i in 2 3 4;
> do
> echo $i
> done;
#结果
2
3
4

引号与for循环

#for循环时以空格作为列表元素的分隔符,如果元素里已经有空格,那么需要加双引号,遍历时仍以空格作为分隔符。
for i in "Say Nothing" "What is" "I'm a space";
> do
> echo $i;
> done;
# 结果
Say Nothing
What is
I'm a space

IFS结合FOR循环

#如果For遍历元素时不是空格(默认),那么可以通过IFS变量进行设置。当前演示的是以制表符(\t)来分割for里的元素。当然也可以用其它的字符,如’\n’、’\r’。
cat shellinput.txt
#结果
first parameter second paramete third parameter fourth parameter
#!/bin/bash
IFS=$'\t'
for i in $(cat "$1")
do
echo $i
done;
#结果
first parameter
second paramete
third parameter
fourth parameter

遍历目录与文件

# 遍历指定的目录下所有内容,并按照文件类型输出(目录和文件)。
#!/bin/bash
for path in /home/shenliang/workdata/*
do
if [ -d $path ]
then
echo "$path是文件夹"
elif  [ -f $path ]
then
echo "$path是文件"
fi
done
#结果
./shell_ifs.sh
/home/shenliang/workdata/BERT-BiLSTM-CRF-NER-master.zip是文件
/home/shenliang/workdata/build_medicalgraph.py是文件
/home/shenliang/workdata/chinese_L-12_H-768_A-12.zip是文件
/home/shenliang/workdata/data是文件夹
/home/shenliang/workdata/ner是文件夹
/home/shenliang/workdata/news是文件夹

变量自增For循环

# 类似C语言的写法编写for循环,这里利用内置的变量自增的方式。
# 注意,这种情况下“()”需要两个。
for (( i=1; i<5; i++ ))
> {
> echo $i
> }
#结果
1
2
3
4

嵌套循环

#循环嵌套即,循环是两层或者更多层的情况。
for (( i=1;i<=2;i++ ))
> do
> echo "当前在第一层循环:$i"
> for (( j=1;j<=3;j++ ))
> do
> echo "  当前在第二层循环:$j"
> done
> done
#执行结果
当前在第一层循环:1
当前在第二层循环:1
当前在第二层循环:2
当前在第二层循环:3
当前在第一层循环:2
当前在第二层循环:1
当前在第二层循环:2
当前在第二层循环:3

重定向循环输出

#重定向循环输出是对循环的结果进行重定向,即结果可以输出到一个文件内。
#!/bin/bash
for path in /home/shenliang/workdata/*
do
if [ -d $path ]
then
echo "$path是文件夹"
elif  [ -f $path ]
then
echo "$path是文件"
fi
done > output_sh.txt
#查看执行后的文件内容
cat output_sh.txt
# 部分
/home/shenliang/workdata/BERT-BiLSTM-CRF-NER-master.zip是文件
/home/shenliang/workdata/build_medicalgraph.py是文件
/home/shenliang/workdata/chinese_L-12_H-768_A-12.zip是文件
/home/shenliang/workdata/data是文件夹
/home/shenliang/workdata/ner是文件夹
/home/shenliang/workdata/news是文件夹
注: >> 亦可,即追加的意思,而>是覆盖。

循环控制

#1 通过break结束整个循环
for (( i=1;i<=3;i++ ))
> do
> echo "循环内数$i"
> if [ $i -eq 2 ];
> then
> break
> fi
> done
#结果
循环内数1
循环内数2
#2 通过break终止循环,结合条件判断,即满足条件即终止。
for d in ./*
> do
> [ -d $d ] && break
> echo "找到文件$d"
> done
#结果
找到文件./BERT-BiLSTM-CRF-NER-master.zip
找到文件./build_modle.py
找到文件./chinese_L-12_H-768_A-12.zip
#3 通过continue略过某次循环
for (( i=1;i<=3;i++ ))
> do
> if [ $i -eq 2 ];
> then
> continue
> fi
> echo "循环内数$i"
> done
#结果
循环内数1
循环内数3
#4 通过continue控制循环,结合条件判断,即满足条件时继续。
for d in ./*
> do
> [ -d $d ] || continue
> echo "$d是文件夹"
> done
#结果
./data是文件夹
./ner是文件夹
./news是文件夹
./QASystemOnMedicalKG-master是文件夹
./Rasa_NLU_Chi-master是文件夹
./shellspace是文件夹
./word2vec是文件夹

WHILE循环

#通过while循环打印数字
#!/bin/bash
num=1
while ((num<10));
do
echo -e "$num \c"
((num++))
done;echo
#结果
1 2 3 4 5 6 7 8 9

Until循环

# Until循环的判断逻辑与WHILE相反。WHILE条件是临界范围内,而Until是超过临界范围时终止,两者do的内容都类似。只是判断条件不同。
#!/bin/bash
num=1
until (( num >9 ));
do
echo -e "$num \c"
(( num++ ))
done;echo
#结果
1 2 3 4 5 6 7 8 9

从文件读参数循环执行

#定义含IP地址的server文件
cat servers.txt
192.169.111.128
127.0.0.1
#!/bin/bash
#IFS=$'\t'
#for i in $(cat "$1")
#do
#echo $i
#done;
while read server;
do
ping -c2 "$server"
done < servers.txt
#结果
PING 192.168.111.128 (192.168.111.128) 56(84) bytes of data.
64 bytes from 192.168.111.128: icmp_seq=1 ttl=64 time=0.343 ms
64 bytes from 192.168.111.128: icmp_seq=2 ttl=64 time=0.263 ms
--- 192.168.111.128 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.263/0.303/0.343/0.040 ms
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.027 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.027 ms
--- 127.0.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.027/0.027/0.027/0.000 ms

你该认识这样的Linux_shell之循环控制相关推荐

  1. c语言循环控制答案,C语言程序设计 实四 循环控制 答案 《西北民大 电气院》.doc...

    C语言程序设计 实四 循环控制 答案 <西北民大 电气院> 实验四 循环控制(蓝色笔体内容可以不写在实验报告里,理解并掌握即可.)(实验课后的下一周的周三,请班长分别收好预习报告和实验报告 ...

  2. c语言第五章循环控制实验报告,C语言实验报告5《循环控制》.doc

    C语言实验报告5<循环控制> 嘉应学院 计算机学院 实 验 报 告 课程名称C语言程序设计实验名称循环控制实验地点指导老师实验时间提交时间班 级姓 名座 号 一.实验目的和要求 (1)熟悉 ...

  3. C语言step-by-step(四)(循环控制)

    第4.1章循环控制 continue和break控制程序结构. continue跳过语句,继续执行循环: 用法: (提供程序下载) 12没有被打印出来,结果不演示了. break 跳出循环语句,跳出s ...

  4. 循环控制-链表反转(与创建链表)

    0.目录 1.循环控制 2.Java代码实现 2.1 创建链表和递归反转实现 2.2 循环反转思路 2.3 链表反转的实现 2.4 测试用例 2.5 循环控制-创建链表 1.循环控制 循环书写方法: ...

  5. php 常量 循环 1,php循环控制break、continue语句、goto语句和php常量

    1.循环控制break语句: break结束当前 for,while,do-while 或者switch 结构的执行. Break可以接受一个可选的数字参数来决定跳出几重循环. $i = 0; whi ...

  6. scjp考试准备 - 1 - 循环控制

    判断如下代码最后的执行结果. public class Breaker{static String o = "";public static void main(String[] ...

  7. java循环控制_Java - 循环控制(Loop Control)

    Java - 循环控制(Loop Control) 可能存在需要多次执行代码块的情况. 通常,语句按顺序执行:首先执行函数中的第一个语句,然后执行第二个语句,依此类推. 编程语言提供各种控制结构,允许 ...

  8. 零基础学Python(第九章 循环控制【break】与【continue】)

    本套学习内容共计[22]个章节,每个章节都会有对应的从0-1的学习过程详细讲解,希望可以给更多的人提供帮助. 开发环境:[Win10] 开发工具:[Visual Studio 2019] 本章为循环控 ...

  9. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化

    研究了递归方法实现回溯,解决N皇后问题,下面我们来探讨一下非递归方案 实验结果令人还是有些失望,原来非递归方案的性能并不比递归方案性能高 代码如下: package com.newflypig.eig ...

最新文章

  1. 有了实例化需求,交付高质量软件不再是空谈
  2. C语言的 32个关键之和9个控制语言之关键字
  3. centos6.8安装docker
  4. MySQL的错误:No query specified
  5. http://www.cnoug.org/viewthread.php?tid=9292
  6. jspdf 分页_使用html2canvas跟jspdf导出导出PDF文件
  7. (转)淘淘商城系列——使用JsonView来格式化json字符串
  8. 如何在 Mac 上更改 iCloud 钥匙串的密码?
  9. sql 二进制文件的导入导出
  10. light动名词_英语语法大全之动名词
  11. LIN、K、CAN、CAN-FD、FlexRay、Ethernet 、MOST、VAN常见汽车总线简介
  12. 关于笔记本WLAN(无线)口共享给以太网口
  13. 求教lotka-volterra模型在matlab中的仿真模拟
  14. Python语法概念基础
  15. 深圳Java培训机构排名榜单:动力节点上榜,第一名耳熟能详
  16. 【重点】心田花开:三年级教材知识点汇总
  17. 女儿提前晒 iPhone X,攻城狮老爸被苹果解雇;Linux Kernel 4.14-rc7 发布
  18. 迈阿密牛津计算机专业,迈阿密大学牛津分校计算机科学
  19. 偏最小二乘回归(三):身体特征与体能训练结果的 案例分析
  20. 云队友丨对话“中国奥格威”:不要迷失在点击率上,销售才是根本

热门文章

  1. boost::spirit模块实现一个类似于 XML 的小型解析器的测试程序
  2. boost::process::throw_on_error相关的测试程序
  3. boost::mp11::mp_set_intersection相关用法的测试程序
  4. Boost.Math 和 Boost.Multiprecision 以提供 许多十进制数字精度的测试程序
  5. boost::geometry::strategy::distance用法的测试程序
  6. boost::geometry::line_interpolate用法的测试程序
  7. Boost:基于不同容器的有界缓冲区比较
  8. ITK:将具有RGB像素的itk :: Image转换为vtkImageData
  9. DCMTK:函数dcmGenerateUniqueIdentifier的测试程序
  10. VTK:InfoVis之XGMLReader