前言
《道德经》第二十五章:“有物混成,先天地生。寂兮寥兮,独立不改,周行而不殆,可以为天下母。吾不知其名,字之曰道,强为之名曰大。大曰逝,逝曰远,远曰反。故,道大,天大,地大,人亦大。城中有四大,而人居其一焉。人法地,地法天,天法道,道法自然。”
内容预知
假设/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/test/ 目录中有多个重要文件,编写脚本使用 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
实验测试
1. 在/opt目录下新创几个文件,并对其输入一些数据
2. 执行自动生成校验码脚本
3. 修改/opt目录下的内容
4. 启用文件检测脚本
精炼版:
小题五:购物商场的编写
需求:编写一个逛商场选购商品脚本,每家商店有五种商品选购(衣服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
测试结果: