一、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
done2.生成随机数字
$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]=2curl命令:开源的用于数据传输的命令行工具。可以用于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



















