Shell脚本 - 编程进阶02( while 循环 )

1、编写脚本,求 100 以内所有正奇数之和;
  • 脚本
#! /bin/bash
SUM=0
i=1
while [ $i -lt 100 ]
do
	if [ $[i%2] != 0 ]
	then
		#echo $i
		let SUM+=i
	fi
	let i++
done
echo $SUM
  • 执行结果
[root@centos7 ~]# ./while_sum.sh
2500
2、编写脚本,提示请输入网络地址,如 192.168.0.0,判断输入的网段中主机在线状态,并统计在线和离线主机各多少;
  • 脚本(网段:10.10.10.0/24)
#! /bin/bash
NET=10.10.10.
echo > hosts.txt
while [[ $IP -le 254 ]]
do
{
	if ping -c1 -w2 $NET$IP &> /dev/null
	then
		echo $NET$IP is up | tee -a hosts.txt
	else
		echo $NET$IP is down | tee -a hosts.txt	
	fi
} &
let IP++
done
wait
echo UP:`cat hosts.txt | grep up | wc -l`
echo DOWN:`cat hosts.txt | grep down | wc -l`
  • 执行结果
[root@centos7 ~]# ./net.sh
10.10.10.2 is up
10.10.10. is down
10.10.10.10 is up
10.10.10.1 is up
10.10.10.66 is up
10.10.10.7 is down
10.10.10.6 is down
10.10.10.4 is down
10.10.10.8 is down
10.10.10.18 is down
10.10.10.27 is down
10.10.10.21 is down
10.10.10.15 is down
10.10.10.30 is down
10.10.10.31 is down
10.10.10.32 is down
10.10.10.16 is down
10.10.10.28 is down
10.10.10.29 is down
....省略部分显示内容....
10.10.10.251 is down
10.10.10.254 is down
10.10.10.252 is down
10.10.10.253 is down
10.10.10.249 is down
10.10.10.250 is down
UP:4
DOWN:251
3、编写脚本,打印九九乘法表;
  • 脚本
#! /bin/bash
for ((i=1;i<=9;i++));do
	for ((j=1;j<=$i;j++));do
		echo -ne "$j * $i = $((j*i))\t"
	done
	echo
done
echo
for ((i=9;i>0;i--));do
	for((j=1;j<=i;j++));do
		echo -ne "$j * $i = $((j*i))\t"
	done
	echo
done
  • 执行结果
[root@centos7 ~]# ./jiujiu.sh
1 * 1 = 1	
1 * 2 = 2	2 * 2 = 4	
1 * 3 = 3	2 * 3 = 6	3 * 3 = 9	
1 * 4 = 4	2 * 4 = 8	3 * 4 = 12	4 * 4 = 16	
1 * 5 = 5	2 * 5 = 10	3 * 5 = 15	4 * 5 = 20	5 * 5 = 25	
1 * 6 = 6	2 * 6 = 12	3 * 6 = 18	4 * 6 = 24	5 * 6 = 30	6 * 6 = 36	
1 * 7 = 7	2 * 7 = 14	3 * 7 = 21	4 * 7 = 28	5 * 7 = 35	6 * 7 = 42	7 * 7 = 49	
1 * 8 = 8	2 * 8 = 16	3 * 8 = 24	4 * 8 = 32	5 * 8 = 40	6 * 8 = 48	7 * 8 = 56	8 * 8 = 64	
1 * 9 = 9	2 * 9 = 18	3 * 9 = 27	4 * 9 = 36	5 * 9 = 45	6 * 9 = 54	7 * 9 = 63	8 * 9 = 72	9 * 9 = 81	

1 * 9 = 9	2 * 9 = 18	3 * 9 = 27	4 * 9 = 36	5 * 9 = 45	6 * 9 = 54	7 * 9 = 63	8 * 9 = 72	9 * 9 = 81	
1 * 8 = 8	2 * 8 = 16	3 * 8 = 24	4 * 8 = 32	5 * 8 = 40	6 * 8 = 48	7 * 8 = 56	8 * 8 = 64	
1 * 7 = 7	2 * 7 = 14	3 * 7 = 21	4 * 7 = 28	5 * 7 = 35	6 * 7 = 42	7 * 7 = 49	
1 * 6 = 6	2 * 6 = 12	3 * 6 = 18	4 * 6 = 24	5 * 6 = 30	6 * 6 = 36	
1 * 5 = 5	2 * 5 = 10	3 * 5 = 15	4 * 5 = 20	5 * 5 = 25	
1 * 4 = 4	2 * 4 = 8	3 * 4 = 12	4 * 4 = 16	
1 * 3 = 3	2 * 3 = 6	3 * 3 = 9	
1 * 2 = 2	2 * 2 = 4	
1 * 1 = 1
4、编写脚本,利用变量 RANDOM 生成 10 个随机数字,输出这个 10 数字,并显示其中的最大值和最小值;
  • 脚本
#!/bin/bash
i=1
MAX=0
MIN=0
while [ $i -lt 10 ]
do
	NUM=$RANDOM
	echo $NUM
	[ $i -eq 1 ] && let MIN=$NUM	
	[ $NUM  -gt $MAX ] && let MAX=$NUM
	[ $NUM  -lt $MIN ] && let MIN=$NUM		
	let i++
done
echo MAX:$MAX MIN:$MIN
  • 执行结果
[root@centos7 ~]# ./random.sh
4694
26277
28426
986
32677
12627
29870
29362
13366
MAX:32677 MIN:986
5、编写脚本,实现打印国际象棋棋盘;
  • 脚本
#!/bin/bash
i=1
while [ $i -lt 8 ];do
	j=1	
	while [ $j -lt 8 ];do	
		num=$[$[i+j]%2]	
		if [ $num -eq 0 ]
		then
			echo -e '\e[41m  \e[0m\c'
		else
			echo -e '\e[47m  \e[0m\c'
		fi
		let j++
	done
	let i++
	echo
done
  • 执行结果
    在这里插入图片描述
6、后续六个字符串:efbaf275cd、4be9c40b8b、44b2395c46、f8c8873ce0、b902c16c8b、ad865d2f63 是通过对随机数变量 RANDOM 随机执行命令: echo $RANDOM|md5sum|cut –c1-10 后的结果,请破解这些字符串对应的 RANDOM 值。
  • 脚本
#!/bin/bash
echo  > md5.txt
str="efbaf275cd
4be9c40b8b
44b2395c46
f8c8873ce0
b902c16c8b
ad865d2f63"

for i in $str
do
	while : 
	do
		NUM=$RANDOM
		MD5=`echo $NUM | md5sum`
		MD5CUT=`echo $MD5 | cut -c1-10`
		echo $MD5CUT >> md5.txt
		if [ $i == $MD5CUT ]
		then
			echo -e "[ $NUM\t ] =====> [ $MD5 ] =====> [ $MD5CUT ]"
			break
		fi
	done
done
  • 执行结果(执行时间很长,需耐心等待)
[root@centos7 ~]# ./while_md5.sh
[ 15000	 ] =====> [ efbaf275cd15aba9ddaef65f19788bb4  - ] =====> [ efbaf275cd ]
[ 12000	 ] =====> [ 4be9c40b8bffc9e90c70d4a0938da64a  - ] =====> [ 4be9c40b8b ]
[ 9000	 ] =====> [ 44b2395c46796bb452778f4ecb7fc9e3  - ] =====> [ 44b2395c46 ]
[ 6000	 ] =====> [ f8c8873ce051ad3f8cfec539dbfcdab8  - ] =====> [ f8c8873ce0 ]
[ 3000	 ] =====> [ b902c16c8b5cbedcb84724d23a2d29d7  - ] =====> [ b902c16c8b ]
[ 1000	 ] =====> [ ad865d2f63b9feb2552c220385fbb7e3  - ] =====> [ ad865d2f63 ]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值