【Shell 脚本速成】08、Shell 流程控制——for 循环语句

目录

一、循环语句-for

1.1 for 介绍

1.2 for基本语法

1.3 for 条件应用 

1.4 for C 格式语法

二、练习案例


 

        工作中总是有很多工作需要重复性来完成,比如每天都需要执行一次备份、每天都需要分析一次业务的access.log日志,每分钟都需要监测一次主机的状态等等工作,这些重复性的工作我们一般都是使用脚本来完成,对于不需要频繁执行的任务,可以结合计划任务➕脚本完成,但是系统的计划任务只能精确到分,不能满足更频繁的重复工作。

这个时候我们除了依赖计划任务之外还有很多选择,比如脚本中的循环语句。

循环的优点:

  • 节省内存 10M脚本 1M脚本 哪个更剩内存 完成同一个任务
  • 结构更清晰
  • 节省开发时间成本

一、循环语句-for

1.1 for 介绍

        脚本在执行任务的时候,总会遇到需要循环执行的时候,比如说我们需要脚本每隔五分钟执行一次ping的操作,除了计划任务,我们还可以使用脚本来完成,那么我们就用到了循环语句。

1.2 for基本语法

列表 for 循环( 也加 for 条件循环):用于将一组命令执行已知的次数。下面给出了for循环语句的基本格式:

for variable_name in {list}
     do
          command 
          command
          …
     done

或者

for variable in a b c
     do
         command
         command
     done

1.3 for 条件应用 

  • for 条件不同的赋值方式

a、赋值来自一个范围

for var in {1..10}
	do 
			echo $var
done

b、直接赋值

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

c、赋值来自命令

for var in `seq  10`
	do 
			echo $var
done

案例演示:

[root@shell ~]# cat for-1.sh 
#!/bin/bash

#for test in {1..3}
#for test in 1 2 3 
for test in `seq 3`
do
	echo "$test"
	echo "hello"
	echo "haha"
done

# 运行结果一样
[root@shell ~]# sh for-1.sh 
1
hello
haha
2
hello
haha
3
hello
haha
  • 不带列表循环

不带列表的 for 循环执行时由用户指定参数和参数的个数,下面给出了不带列表的for循环的基本格式:

for variable
    do
        command 
        command
        …
   done

语法结构举例说明:

[root@shell ~]# cat for-2.sh 
#!/bin/bash

for var
do
	echo "$var"
	echo "haha"
done
echo "脚本后面有$#个参数"

[root@shell ~]# sh for-2.sh 1 2 3 4 
1
haha
2
haha
3
haha
4
haha
脚本后面有4个参数

1.4 for C 格式语法

类 C 风格的 for 循环

for(( expr1;expr2;expr3 ))
	do
		command
		command
		…
	done

# 如:
for (( i=1;i<=5;i++))  
	do
		echo $i
	done


# 解释说明
expr1:定义变量并赋初值   变量初始值
expr2:决定是否进行循环(条件)  变量的条件
expr3:决定循环变量如何改变,决定循环什么时候退出 自增或自减运算

# 多变量用法
for ((A=1,B=10;A<10,B>1;A++,B--))

案例演示:

[root@shell ~]# vim for-3.sh
#!/bin/bah

#for (( i=1;i<=5;i++ ))
for (( x=0,y=10;i<=10,y>=0;x++,y-- ))
do
	#echo "$i"
	echo "$x $y"
	echo "hhhhhh"
done

[root@shell ~]# sh for-3.sh
0 10
hhhhhh
1 9
hhhhhh
2 8
hhhhhh
3 7
hhhhhh
4 6
hhhhhh
5 5
hhhhhh
6 4
hhhhhh
7 3
hhhhhh
8 2
hhhhhh
9 1
hhhhhh
10 0
hhhhhh

注意:for 条件不能和 shell 的运算混合使用。 

二、练习案例

jobs: 写一个扫描脚本,扫描本地网络中存活的机器

案例需求:
判断本地网络中哪些 IP 被使用

案例分析:
采用 ping 的方式判断 IP 是否被占用

  • 能ping通说明占用
  • 不能ping通说明未被占用

算法:

  1. ping ip
  2. 分析ping结果
  3. 输出结果 
[root@shell ~]# vim scan_local_ip.sh
#!/bin/bash

# 根据实际情况填写网段
netsub="192.168.78."

#1、循环ping IP地址,能 ping 通说明IP存在。
for ip in `seq 1 254`
do
  (
     #2、判断Ping结果
     if ping -c1 $netsub$ip &>/dev/null;then
          #3、输出结果
          echo "$netsub$ip is open"
     else
          echo "$netsub$ip is close"
     fi
   ) &
done

# ( ) 表示在括号内的代码块为一组,并发(同时)执行
# -c  表示 ping 的次数
# &   表示后台运行

上一篇文章:【Shell 脚本速成】07、Shell 流程控制——if 判断语句_Stars.Sky的博客-CSDN博客

参考文档:流程控制-for循环语句-组团学

你可能感兴趣的:(Shell,linux,运维,服务器)