shell脚本小题狂练之循环(升级版)

 前言

《道德经》第二十五章:“有物混成,先天地生。寂兮寥兮,独立不改,周行而不殆,可以为天下母。吾不知其名,字之曰道,强为之名曰大。大曰逝,逝曰远,远曰反。故,道大,天大,地大,人亦大。城中有四大,而人居其一焉。人法地,地法天,天法道,道法自然。” 

内容预知

 小题一:随机生成密码

 小题二:将一个文件拆分两个或多个文件

 小题三:将十进制的IP地址转化为二进制的IP地址

 小题四:检测重要文件是否发生改变

 脚本需求

 假设/opt/test/ 目录中有多个重要文件,编写脚本使用 md5sum 命令一次性判别目录中的文件是否有发生过改动

 脚本设计思路

脚本操作过程

 实验测试

 1. 在/opt目录下新创几个文件,并对其输入一些数据

2. 执行自动生成校验码脚本 

 3. 修改/opt目录下的内容

4. 启用文件检测脚本 

 小题五:购物商场的编写


 小题一:随机生成密码

需求:编写能够自动生成一个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

 

 测试结果:

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值