前言
《道德经》第二十五章:“有物混成,先天地生。寂兮寥兮,独立不改,周行而不殆,可以为天下母。吾不知其名,字之曰道,强为之名曰大。大曰逝,逝曰远,远曰反。故,道大,天大,地大,人亦大。城中有四大,而人居其一焉。人法地,地法天,天法道,道法自然。”
内容预知
假设/opt/test/ 目录中有多个重要文件,编写脚本使用 md5sum 命令一次性判别目录中的文件是否有发生过改动
小题一:随机生成密码
需求:编写能够自动生成一个6位随机密码的脚本
- [root@localhost xunhuan2]#vim demo1.sh
-
- #!/bin/bash
-
-
- str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPKRSTUVWXYZ0123456789"
-
- for i in {1..6}
- do
- num=$[RANDOM%${#str}]
- key=${str:num:1}
- passwd=$key$passwd
- done
- echo "随机生成的六位数密码为:"$passwd

测试结果:

小题二:将一个文件拆分两个或多个文件
需求:编写能够按照每100行分割文件的脚本,满一百行后,自动创建下一个文件进行保存
- [root@localhost xunhuan3]#vim demo1.sh
-
- IFS=$'\n'
- #定义a变量充当为行计数器
- a=0
- #定义b变量充当自动分配给文件的累加序号
- b=1
- #使用$()获取cat命令查看的文件内容
- for line in $( cat /xunhuan3/abc )
- do
- #每读一行,行计数器加一
- let a++
- #定义c变量来判断行数是否满足一百行
- c=$[a%100]
- #每满足一百行,b变量值加1,即会更换文件序号,后面再追加写入的内容会保存到新的文件当中
- if [ $c -eq 0 ];then
- echo $line >> /xunhuan3/test"$b".txt
- let b++
- else
- echo $line >>/xunhuan3/test"$b".txt
-
- fi
- done
- #还原默认分隔符
- IFS=$IFS_BAK

分割文件abc的测试:

小题三:将十进制的IP地址转化为二进制的IP地址
需求:将一个点分十进制格式的IP地址转换成点分二进制格式
-
- #!/bin/bash
-
- read -p "请输入一个ip地址:" ip
- a=1
- b=0
- while [ $a -le 4 ]
- do
- #取IP地址的“.”前面的首字段
- num=${ip%%.*}
- for i in {1..8}
- do
- var=$[num % 2]
- sum=$var$sum
- num=$[num / 2]
- done
- #除去IP地址的首个字段,并将(除去首个字段的IP)重新赋值给变量
- ip=${ip#*.}
- let a++
- echo -n ${sum:0:8}
- let b++
- if [ $b -lt 4 ];then
- echo -n '.'
- else
- break
- fi
- done
- echo ""

测试结果:

进化版:

小题四:检测重要文件是否发生改变
知识拓展:在Linux中存在着一些重要文件,处于安全运维的着想,我们需要经常了解这些重要文件是否发生变动,来确保我们能在第一时间掌握!所以我们可以启用 md5sum 对重要文件提前做好校验对。到后面想验证文件是否变动,就可以再次对该文件生成校验码,然后进行比对,校验码发生改变,则该文件一定发生了改变。

针对需求,做出两个脚本。
第一个脚本自动读取/opt 目录下的文件,并将其路径添加到一个新生成文件中,并且用循环为每一个文件生成md5校验码保存到md5.txt文件中
第二个脚本:生成新的md5校验码,与之前的检验码进行比对,发生改变则输出该文件。
自动生成md5校验码的脚本
- vim md5.sh
- #!/bin/bash
-
-
- ls /opt/* >/xunhuan2/jilu.txt
- cat /xunhuan2/jilu.txt|while read line
- do
- md5sum $line >>/xunhuan2/md5.txt
- done
-

用来检查文件变动的脚本
- vim md5test.sh
- #!/bin/bash
-
- cat /xunhuan2/jilu.txt|while read line
- do
- key1=$(cat /xunhuan2/md5.txt | grep "$line")
- key2=$(md5sum "$line" )
- if [ "$key1" = "$key2" ];then
- echo "$line 文件没有发生改变"
- else
- echo "$line 文件发生改变!"
-
- fi
- done






精炼版:

小题五:购物商场的编写
需求:编写一个逛商场选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。
- [root@localhost xunhuan2]#vim shoppingtest.sh
-
- #!/bin/bash
-
- a=0
- i=1
- sum=0
- while [ $a -eq 0 ]
- do
- echo "欢迎来到第 $i 家店"
- read -p "是否要进店选购?(yes/no)" DO
- while [ $DO = "yes" ]
- do
- echo "1:衣服¥500"
- echo "2:裤子¥400"
- echo "3:鞋子¥350"
- echo "4:帽子¥150"
- echo "5:袜子¥50"
- echo "6或其他:放弃选购"
-
- read -p "请选择你需要的商品序号:" num
- case $num in
- 1)
- echo "选购衣服成功"
- let sum+=500
- ;;
- 2)
- let sum+=400
- ;;
- 3)
- echo "选购鞋子成功"
- let sum+=350
- ;;
- 4)
- echo "选购帽子成功"
- let sum+=150
- ;;
- 5)
- echo "选购袜子成功"
- let sum+=50
- ;;
- *)
- echo "放弃购买"
-
- esac
- read -p "是否再继续选购(yes/no)" DO
- done
-
- read -p "是否继续逛下一个店家(yes/no)" GO
- if [ $GO = "yes" ];then
- let i++
- else
- echo "您一共逛了 ${i} 家商店"
- echo "您一共消费了${sum} 元 "
- break
- fi
- done

测试结果:
