您当前的位置:首页 > 电脑百科 > 网络技术 > 网络技术

快速掌握shell脚本的各种循环语句

时间:2020-08-24 11:20:40  来源:  作者:

​shell的各种循环语句:for、while、until、select​

1、for循环

#语法结构

#第一种:取值变量

for 变量名 in 变量取值表
do
    指令 
done

#例子:

#示例
for a in {1..9}
do
    mkdir dir$a
done
#说明:创建9个目录

#第二种:C语言型for循环

for ((exp1; exp2; exp3))
do
    指令
done

#例子:

#示例
for ((i=1;i<=3;i++))
do
    echo $i
done
#解释:i从1开始,当i<=3就可以运行,如果运行的值大于3,就退出循环

#语法结构讲解
for关键字后的双括号是三个表达式,
第一个是变量初始化(例如:i=1),第二个为变量的范围(例如i<=3),第三个为变量自增或自减(例如i++)。
当第一个表达式的初始化值符合第二个变量的范围时,就进行如循环执行,当条件不满足时就退出循环

#简单示例

#1.竖向打印10 9 8 7 6 5几个数字
#第一种方法:直接列出元素

[root@game scripts]# cat for1.sh 
#!/bin/bash

for i in 1 2 3 4 5
do
    echo $i
done

#效果
[root@game scripts]# sh for1.sh 
1
2
3
4
5

第二种方法:使用大括号{}生成数字序列

[root@game scripts]# cat for2.sh 
#!/bin/bash

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

#效果
[root@game scripts]# sh for2.sh 
1
2
3
4
5

#第三种方法:使用seq生成数字序列

[root@game scripts]# cat for3.sh 
#!/bin/bash

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

#效果
[root@game scripts]# sh for3.sh 
1
2
3
4
5

#2.获取当前目录下的目录或文件名,并将其作为变量列表打印输出

#数据
[root@game ~]# mkdir -p /test/{test1.txt,test2.txt,guo.txt,ke.txt}
[root@game ~]# ls -l /test/
total 0
drwxr-xr-x. 2 root root 6 Aug 21 22:14 guo.txt
drwxr-xr-x. 2 root root 6 Aug 21 22:14 ke.txt
drwxr-xr-x. 2 root root 6 Aug 21 22:14 test1.txt
drwxr-xr-x. 2 root root 6 Aug 21 22:14 test2.txt

#编写脚本
[root@game scripts]# cat for4.sh 
#!/bin/bash
usage(){
    echo "directory not found"
}

[ ! -d /test ] && usage && exit 1
cd /test

for i in `ls`
do
    echo $i
done

效果
[root@game scripts]# sh for4.sh 
guo.txt
ke.txt
test1.txt
test2.txt

2、while循环

#while循环一般应用于守护进程程序或一直循环执行

#语法格式

while <条件表达式>
do
    指令
done

#简单示例

每隔2秒在屏幕上输出一次负载值
[root@game scripts]# cat while1.sh 
#!/bin/bash

while true
do
    uptime
    sleep 2 #暂停2秒再执行
done
#提示:while true表示条件永远为真,因此会一直运行,像死循环一样,称为守护进程

#效果:每隔2秒就输出一次
[root@game scripts]# sh while1.sh 
 23:11:35 up 2 days,  2:00,  2 users,  load average: 0.00, 0.01, 0.05
 23:11:37 up 2 days,  2:00,  2 users,  load average: 0.00, 0.01, 0.05
 23:11:39 up 2 days,  2:00,  2 users,  load average: 0.00, 0.01, 0.05

3、until循环

#until循环是当条件表达式不成立时,就会进入循环,当条件表达式成立时,就会终止循环

#语法格式

until <条件表达式>
do
    指令
done

#示例

#如果用户输出的是guoke就符合条件,退出循环,如果不是,用户输入3次之后就退出循环
[root@game scripts]# cat until1.sh
#!/bin/bash

i=1
until [ "$user" = "guoke" -o "$i" -gt 3 ]
do
    read -p "please enter you username:" user
    let i++
done

#效果
[root@game scripts]# sh until1.sh 
please enter you username:guoke
[root@game scripts]# sh until1.sh 
please enter you username:1
please enter you username:1
please enter you username:1
[root@game scripts]#

4、select循环

#语法格式

select 变量名 in [菜单取值列表]
do
    指令
done

#示例

#第一种:直接使用列表字符串
[root@game scripts]# cat select1.sh 
#!/bin/bash

select name in Apache httpd Nginx Tomcat
do
    echo $name
done

#效果
[root@game scripts]# sh select1.sh 
1) apache
2) httpd
3) nginx
4) tomcat
#? 1
apache
#? 3
nginx
#? 4
tomcat
#? ^C


#第二种:采用数组做变量列表
[root@game scripts]# cat select2.sh 
#!/bin/bash
​
array=(aache nginx tomcat lighttpd)
select name in "${array[@]}"
do
    echo $name
done
#效果
[root@game scripts]# sh select2.sh 
1) apache
2) nginx
3) tomcat
4) lighttpd
#? 3
tomcat
#? 4
lighttpd
#? ^C

5.循环控制及状态返回值

break (循环控制)
continue (循环控制)
exit (退出脚本)
return (退出函数)

#区别

break continue在条件语句及循环语句(for if while等)中用于控制程序的走向
exit是终止所有语句并退出脚本
return:仅用于在函数内部返回函数执行的状态值

#break示例

#如果i等于3,那么就终止循环
[root@game scripts]# cat break1.sh 
#!/bin/bash

for ((i=0;i<=5;i++))
do
    if [ $i -eq 3 ];then
    break
    else
    echo $i
    fi
done
echo "1111"
yum install net-tools -y > /dev/null
[ $? -eq 0 ] && echo "already install"


#效果
[root@game scripts]# sh break1.sh 
0
1
2
1111
already install
#说明:i等于3的时候就终止循环,但是没有跳出脚本

#exit示例

[root@game scripts]# cat exit1.sh
#!/bin/bash

for ((i=0;i<=5;i++))
do
    if [ $i -eq 3 ];then
    exit 1
    fi
    echo $i
done
echo "ok"

#执行效果
[root@game scripts]# sh exit1.sh
0
1
2
#说明:当i等于3的时候就会退出脚本了,就不会执行后面的语句

#continue示例

[root@game scripts]# cat con1.sh 
#!/bin/bash

for ((i=0;i<=5;i++))
do
    if [ $i -eq 3 ];then
    continue
    else
    echo $i
    fi
done
echo "ok"

#执行效果
[root@game scripts]# sh con1.sh 
0

#获取更多学习资料,点击了解更多,关注公众号老油条IT记



Tags:shell脚本   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
什么是shellshell是c语言编写的程序,它在用户和操作系统之间架起了一座桥梁,用户可以通过这个桥梁访问操作系统内核服务。 它既是一种命令语言,同时也是一种程序设计语言,你可以...【详细内容】
2021-12-16  Tags: shell脚本  点击:(16)  评论:(0)  加入收藏
如何在Linux环境中加密shell脚本?shell脚本包含密码,不希望其他具有执行权限的人查看shell脚本并获取密码。可以安装使用shc工具,普通用户无法读取shc创建的加密Shell...【详细内容】
2021-11-04  Tags: shell脚本  点击:(40)  评论:(0)  加入收藏
shell脚本是一个命令语言,面向的是操作系统执行。如果写过shell脚本的话,应该体会过编写过程的痛苦。因为shell并不是一个编程语言,并不支持常见的数组,JSON等数据结构,也不支持...【详细内容】
2021-08-09  Tags: shell脚本  点击:(109)  评论:(0)  加入收藏
日常工作中经常涉及Linux环境下的进程以及Docker容器相关的操作,现有几例常用的shell脚本,以供大家学习交流。 1进程的启动、关闭、重启 应用程序中有master、worker两种角色...【详细内容】
2021-05-06  Tags: shell脚本  点击:(227)  评论:(0)  加入收藏
一、脚本今天主要分享一个shell脚本,用来获取linux系统CPU、内存、磁盘IO等信息。#!/bin/bash# 获取要监控的本地服务器IP地址IP=`ifconfig | grep inet | grep -vE &#39;ine...【详细内容】
2021-03-16  Tags: shell脚本  点击:(204)  评论:(0)  加入收藏
每次启动Java程序jar包的时候,难道你还在手敲java -jar xxserver.jar&hellip;&hellip;?边敲边想着都需要追加哪些参数?今天就推荐给大家一个几乎通用的Shell脚本,它支持Java程...【详细内容】
2021-01-18  Tags: shell脚本  点击:(161)  评论:(0)  加入收藏
相信大家在网上一搜,就能搜出很多这样的文章,但我这个不一样哦,我在脚本里加了些自定义的东西(如关闭版本号,修改nginx版本头信息,nginx性能优化等等),可以不用修改直接就可...【详细内容】
2020-12-24  Tags: shell脚本  点击:(132)  评论:(0)  加入收藏
在企业的Liunx运维中,经常需要应用到各种shell脚本,比如Mysql数据库备份Shell脚本和Mysql主从同步监控Shell脚本等等常用企业运维shell脚本。。下面分享两例,希望对大家有帮助...【详细内容】
2020-12-18  Tags: shell脚本  点击:(195)  评论:(0)  加入收藏
在编写脚本的过程中,很多时候都需要我们去设置IP地址,密码之类的变量,为了易用性,我们对这些变量的值都会提供选择范围或者设置随机值以及默认值等。那么如果我们要判断使用脚本...【详细内容】
2020-12-04  Tags: shell脚本  点击:(302)  评论:(0)  加入收藏
Jenkins是一款开源的CI&CD软件, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。JenkinsJenkins基于Java环境,可以部署在windows/Mac OS/linux上,通过其网页...【详细内容】
2020-11-06  Tags: shell脚本  点击:(610)  评论:(0)  加入收藏
▌简易百科推荐
写一个shell获取本机ip地址、网关地址以及dns信息。经常会遇到取本机ip、网关、dns地址,windows一个命令ipconfig /all全部获取到,但linux系统却并非如此。linux系统都自带ifc...【详细内容】
2021-12-27  K佬食古    Tags:shell   点击:(1)  评论:(0)  加入收藏
步骤1、配置 /etc/sysconfig/network-scripts/ifcfg-eth0 里的文件。it动力的CentOS下的ifcfg-eth0的配置详情:[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifc...【详细内容】
2021-12-24  忆梦如风    Tags:网卡   点击:(9)  评论:(0)  加入收藏
1、查找当前目录下所有以.tar结尾的文件然后移动到指定目录find . -name “*.tar” -execmv {}./backup/ ;注解:find &ndash;name 主要用于查找某个文件名字,-exec 、xargs可...【详细内容】
2021-12-17  郭主任    Tags:运维   点击:(19)  评论:(0)  加入收藏
对于经常上网的朋友来说,除了手机购物上网,pc端玩网页游戏还是很多小伙伴首选的,但是有时候明明宽带链接上了,打开浏览器却出现上不了网的现象,下面小编要来跟大家说说电脑有网络...【详细内容】
2021-12-16  小白系统    Tags:网页无法打开   点击:(28)  评论:(0)  加入收藏
在访问像github、gitlab这样的外国网站时,很有可能会出现页面加载不出来或找不到页面的错误。这时候有的朋友就会以为是网络的问题,于是把Wifi断掉连上自己手机的热点,结果却还...【详细内容】
2021-12-15  启施技术IT狼叔    Tags:外网   点击:(14)  评论:(0)  加入收藏
网络地址来源:获取公网IP地址 https://ipip.yy.com/get_ip_info.phphttp://pv.sohu.com/cityjson?ie=utf-8http://www.ip168.com/json.do?view=myipaddress...【详细内容】
2021-12-15  韦廷华12    Tags:外网ip   点击:(14)  评论:(0)  加入收藏
准备好软件IPOP、用ENSP模拟一下华为交换机 启动交换机 <Huawei>sysEnter system view, return user view with Ctrl+Z.[Huawei]sysname FTPClient[FTPClient]interface vla...【详细内容】
2021-12-15  思源Edward    Tags:交换机   点击:(22)  评论:(0)  加入收藏
我们经常用到netstat命令查看主机连接状况,包括连接ip、端口、状态等,今天就练习下shell分析netsat结果。描述假设netstat命令运行的结果我们存储在nowcoder.txt里,格式如下:Pro...【详细内容】
2021-12-14  K佬食古    Tags:netstat   点击:(19)  评论:(0)  加入收藏
什么是滑动窗口?窗口是操作系统开辟的一块缓存空间,发送方在收到接收方ACK应答之前,必须在缓冲区保留已发送的数据,如果按期收到确认应答,数据就可以从缓冲区移除。什么是滑动窗...【详细内容】
2021-12-14  DifferentJava    Tags:TCP   点击:(28)  评论:(0)  加入收藏
概述日常管理华为路由设备过程中,难为会忘记设备登录密码,那么该如何重置设备登录密码吗?本期文章将全面向各位小伙伴总结分享。重置华为设备登录密码思路先行 采用console登录...【详细内容】
2021-12-10  onme0    Tags:   点击:(27)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条