一、Shell编程文本截取类
1.有一个b.txt文本(内容如下),要求将所有域名截取出来,并统计重复域名出现的次数
http://www.baidu.com/index.html
https://www.atguigu. com/index.html
http://www.sina.com.cn/1024.html
https://www.atguigu.com/2048.htm.
http://www.sina.com.cn/4096.html
https://www.atguigu.com/8192.html
shell编程类面试题主要考察的是:shell语言基础与编程思想
本题考察的是字符串截取与排序
题目答案
[root@localhost ~]# cat b.txt | cut -d "/ " -f 3 | sort | unig -c | sort -nr
3 www.atguigu.com
2 www.sina.com.cn
1 www.baidu.com
命令解释
cut -d "/" -f 3 用”/"作为分隔符,截取第3字段
sort 第一次排序
unig -c 显示该行重复次数
sort -nr 按照数值从大到小排序
2.统计当前服务器正在连接的IP地址,并按连接次数排序
答案
netstat -an | grep ESTABLISHED | awk '{print $5}' | cut -d ":" -f 1 | sort -n | unig -c | sort -nr
二、Shell编程随机字符串类
1.使用循环在/atquigu目录下创建10个txt文件,要求文件名称曲6位随机小写字母加固定字符事(_gg)组成,例如: pzjebg_gg.txt。
考察循环语句、考察随机字符串生产方法
编程思想类面试题
随机字符串生成:
/dev/random 依赖系统中断生成随机字符串,可以保证数据的随机性
但生成数据慢,会占用系统进程资源
/dev/urandom 不依赖系统中断生成随机字符串,生成数据速度快
但数据随机性不足(一般使用/dev/urandom )
tr命令:可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符。
-c: 取代所有不属于第一字符集的字符
-d: 删除所有属于第一字符集的字符
例如:从输入文本中,把不在字符集中的字符删除
[root@localhost ~]# echo "aa...+1 b2c /* $dd 3 ls 4" | tr -dc '0-9 \n'
1 2 3 4
答案:
#!/bin/bash
if [ ! -d /atguigu ] #判断测试目录是否建立
then
mkdir /atguigu
fi
cd /atguigu #进入测试目录
for (( i=1;i<=10;i++ )) #循环10次,每次循环建立6位随机数文件
do
filename=$(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 6)
touch "$filename" _gg.txt
done
2.生成随机数字
$RANDOM #此系统变量可以默认随机生成0-32767的数字
[root@localhost ~]# echo $RANDOM
#生成0-32767随机数
[root@localhost ~]# echo $(($RANDOM%1000))
#生成1000以内的随机数
三、Shell编程网站检测类
1.批量检查多个网站是否可以正常访问,要求使用shell数组实现,检测策略尽量模拟用户真实访问模式。
http://www.atguigu.com
http://www.gulixueyuan.com
http://www.baidu.com
考察数组的概念、监控程序思路、网站连接测试
编程思想类面试题
数组声明
方法一:[root@localhost~]# array_n=(1 2 3)
方法二:
[root@localhost~]# array_n=(1
2
3)
方法三:
[root@localhost~]# array_n[0]=1
[root@localhost~]# array_n[1]=2
[root@localhost~]# array_n[2]=2
curl命令:开源的用于数据传输的命令行工具。可以用于http访问,上传下载、用户认证、代理访问等
命令格式:curl[选项] url或IP地址
选项:
-o: 将命令输出保存在指定文件
-s: Silent模式。不输出任务内容
-w: 按指定格式输出内容,例如 :-w %http code}: 输出http状态码
--connect-timeout : 连接超时时间
HTTP状态码是一个三位数的数字,用于表示客户端和服务器之间的通信状态。以下是常见的HTTP状态码及其含义:
1xx:信息类状态码
2xx:成功类状态码
3xx:重定向类状态码
4xx:客户端错误类状态码
5xx:服务器错误类状态码
答案:
#!/bin/bash
web=(
http://www.atguigu.com
http://www.gulixueyuan.com
http://www.baidu.com
1.1.1.1
)
#定义数组
for i in ${web[*]} #按照数组中值的个数循环,每次循环把数组中值赋予变量i
do
code=S( curl -o /dev/null -s --connect-timeout5 -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-timeout5 -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