shell脚本——循环(for、while)

博客主要介绍了Bash中for和while循环语句。for循环用于循环次数已知场景,通过遍历执行同一组命令,给出打印数字、求累加和、生成随机密码等示例,还介绍了多线程执行脚本方法;while循环用于只知停止条件不知次数的场景,并给出循环输出数字示例。

for循环语句

用法:

  • 读取不同的变量值,用来逐个执行同一组命令。
  • 使用场景:一般用于循环次数事先已知的场景。
  • 执行机制:遍历。

格式:

 for 变量名 in 取值列表
 do
    命令序列
 done

执行机制:

 1.依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束。
 2.如果省略 [in WORDS ... ] ,此时使用位置参数变量 in "$@"

演示

1、打印1到10

[root@localhost ~]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@localhost ~]# seq 1 10
1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# for i in {1..10};do echo $i; done
1
2
3
4
5
6
7
8
9
10

2、打印1到10之间的奇数

[root@localhost ~]# echo {1..10..2}
1 3 5 7 9
[root@localhost ~]# seq 1 2 10
1
3
5
7
9
[root@localhost ~]# for i in {1..10..2};do echo $i; done
1
3
5
7
9

3、打印1到10之间的偶数

[root@localhost ~]# echo {2..10..2}
2 4 6 8 10
[root@localhost ~]# seq 2 2 10
2
4
6
8
10
[root@localhost ~]# for i in {2..10..2};do echo $i; done
2
4
6
8
10

实例

1、求从1加到100的和。

[root@localhost ~]# vim sum100.sh
#!/bin/bash
sum=0
for i in {1..100}
do
sum=$[sum+i]
done
echo "和为 $sum"

[root@localhost ~]# bash sum100.sh 
和为 5050

2、生成6位随机密码

[root@localhost ~]# vim 223.sh 

#!/bin/bash

STR="QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890"
sum=' '
for ((i=1;i<=6;i++))
do
 length=${#STR}
 num=$[RANDOM % length]         //每次循环随机获取0到字符串长度减1的下标值
 value=${STR:num:1}        //进行字符串截取,每次随机取出1个字符
 sum+=$value                //每次追加生成的密码,sum+=$value等同于sum=$sum$value
done
echo $sum
 
[root@localhost ~]# bash 223.sh 
zpGgX2
[root@localhost ~]# bash 223.sh 
iiPFux

多线程执行脚本(并行执行)

普通for循环是串行,一个一个执行。

在do和done中间增加 { } 符号,可以多线程同时执行。

[root@localhost ~]# vim 118.sh 

#!/bin/bash
#多线程,同时ping多台主机
for i in {10..20}
 do
{
  ping -c 2 -w 2 -i 0.5 192.168.1.$i &>/dev/null
 if [ $? -eq 0 ]
  then
   echo "192.168.1.$i " >> ~/host_ip
  else
   echo "192.168.1.$i is dead" $>/dev/null
 fi
}&
#{ }表示多线程同时执行  #增加 & 符号,表示将进程放到后台运行,后台命令之间是不区分  先来后到关系的
done
wait
#wait的作用是等待上面所有后台进程都执行完毕后,才会去执行后  面的语句。如果没有wait,后面的语句是不会等待后台进程的,会>造成一些需要有上下文关系的程序执行错误。
cat /root/host_ip

[root@localhost ~]# bash 118.sh 
192.168.1.10 

while循环语句

用法:

  • 重复测试某个条件,只要条件成立则反复执行。
  • 使用场景:相对于for需要知道循环次数,当我们只知道停止条件,不知道次数时,就需要使用while。

格式:

 while  条件测试操作
 do
    命令序列
 done

1、循环输出1-10的数字

#!/bin/bash

num=1

while [ $num -le 10 ]
do
	echo $num
	num=$(( $num + 1 ))
done
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值