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)!