自学内容网 自学内容网

Linux复习--Shell编程类(文本截取、随机字符串、网站检测)

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除

一、文本截取

1、问题引出

有一个b.txt文本(内容如下),要求将所有域名截取出来,并统计重复域名出现的次数

 http://ww.baidu.com/index.html
 https://www.atguigu.com/index.html
 http://www.sina.com.cn/1024.html
 https://www.atguigu.com/2048.html
 https://www.atguigu.com/8192.html

2、答案

 cat b.txt | cut -d "/" -f 3 | sort | uniq -c | sort -nr
       3 www.atguigu.com
       1 www.sina.com.cn
       1 ww.baidu.com
 # 命令解释
 cut -d "/" -f 3     用"/"作分隔符,截取第3字段
 sort                第一次排序
 uniq -c             显示该行重复次数
 sort -nr            按照数值从大到小排序

3、类似面试题

统计当前服务正在连接的IP地址,并按连接次数排序

 netstat -an | grep ESTABLISHED | awk '{print $5}' | cut -d ":" -f 1 | sort -n |uniq -c |sort -nr

二、随机字符串

1、问题引出

使用循环在/atguigu目录下创建10个txt文件,要求文件名称由6位随机小写字母加固定字符串(_gg)组成,例如:pzjebg_gg.txt

2、随机字符生成

  • /dev/random:依赖系统中断生成随机字符串,可以保证数据的随机性但生成数据慢,会占用系统进程资源
  • /dev/urandom:不依赖系统中断生成随机字符串,生成数据速度快但数据随机性不足(一般使用/dev/urandom)

3、tr命令

  • tr命令:可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符。

参数作用
-c取代所有不属于第一字符集的字符
-d删除所有属于第一字符集的字符
 # 例如:从输入文本中,把不在字符集中的字符删除
 echo "aa...,+1 b2c /* $dd 3 ls 4" | tr -dc '0-9 \n'
 1 2   3  4

4、答案

 #!/bin/bash
 if [ ! -d /atguigu ]            # 判断测试目录是否建立
 then 
     mkdir /atguigu
 fi
 cd /atguigu                 # 进入测试目录
 for (( i=1;i<=10;i++ ))     # 循环十次,每次循环建立6位随机数文件
 do
     filename=$(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 6)
     touch "$filename"_gg.txt
 done

5、扩展

 # 生成0-32767随机数
 echo $RANDOM
 ​
 # 生成1000以内的随机数
 echo $(($RANDOM%1000))

三、网站检测

1、问题引出

批量检查多个网站是否可以正常访问,要求使用shell数组实现,检测策略经量模拟用户真实访问模式。

 http://www.atguigu.com
 http://www.gulinuxyuan.com
 http://www.baidu.com

2、数组

2.1、数组声明方式:

  • 方法一:

 array_n=(1,2,3)
  • 方法二:

 array_n=(1
 2
 3)
  • 方法三:

 array_n[0]=1
 array_n[1]=2
 array_n[2]=2

2.2、数组调用

 echo ${array_n[*]}
 echo ${array_n[0]}

3、答案

 #/bin/bash
 web=(
     http://www.atguigu.com
     http://www.gulinuxyuan.com
     http://www.baidu.com
     1.1.1.1
 )
 # 定义数组
 for i in ${web[*]}
 do
     code=$( curl -o /dev/null -s --connect-timeout 5 -w '%{http_code}' $i | grep -E "200|302")  # 检测curl状态码
     if [ "$code" != ""]     # 变量$code值不为空,则证明网页可以访问
     then
         echo "$i is ok" >> /root/ok.log
     else        # 变量$code值为空,则休眠10秒,重新检测
         sleep 10
         code=$( curl -o /dev/null -s --connect-timeout 5 -w '%{http_code}'$i | grep -E "200|302")
         if [ "$code" != "" ]
         then 
             echo "$i is ok" >> /root/ok.log
         else
             echo "$i is error" >> /root/error.log
         fi
     fi
 done

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。 

学习永无止境,让我们共同进步!!


原文地址:https://blog.csdn.net/lerp020321/article/details/142691976

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!