大厂linux面试题攻略三之Shell编程

avatar
作者
猴君
阅读量:0

一、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 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!