5个面试大概率会经常碰到的shell脚本

640?wx_fmt=jpeg

现在做运维的话,有的公司会有笔试,其中有一项就是要求 shell 脚本。今天给大家罗列 5 个大概率面试经常会碰到的 shell 脚本。

1、实现循环 ping,就是验证服务器通不通。-w 2 表示等待时间为 2 秒,-c 1 表示 ping 一次。

#!/bin/bash
 for i in `seq 1 20`
  do
 if ping -w 2 -c 1 192.168.43.$i | grep "100%" > /dev/null;then
  echo "192.168.43.$i is not reachable"
  else
 echo "192.168.43.$i is reachable"
 fi
  done

2、统计 nginx 日志中请求状态码总数以及异常状态码 4**和5**个数以及所占的百分比。

#!/bin/bash
pwd=/app/nginx/logs/access.log
 for num1 in `cat $pwd | awk '{print $9}' | grep -Ei "^4|^5" | wc -l`
  do
  echo 异常状态码总数:$num1
 for num2 in `cat $pwd | awk '{print $9}'| wc -l`
  do
   echo 请求状态码总数:$num2
  k=$(echo "scale=2;$num1 * 100 / $num2"| bc)%
 echo 异常百分比:$k
  done
 done

3、MySQL 自动备份。

#!/bin/bash
# Mysql vars
DB_USER="root"
DB_PASS='tigergao@123'
MYSQLDUMP_OPT="--opt --events --ignore-table=mysql.events --default-character-set=utf8"

# Others vars
DATE=`date +%Y%m%d_%H%M`
BIN_DIR="/usr/local/mysql/bin/"
BACK_DIR="/opt/backup_database/20190830"

# GET DB_NAMES
DB_NAMES=`${BIN_DIR}/mysql -u${DB_USER} -p${DB_PASS} -A -e "show databases;" | egrep -v "Database|schema"`

# Todo mysqldump
[ -d ${BACK_DIR} ] || mkdir -p ${BACK_DIR}
# mysqldump all databases
${BIN_DIR}/mysqldump ${MYSQLDUMP_OPT} -u${DB_USER} -p${DB_PASS} --all-databases | gzip > ${BACK_DIR}/all_databases_${DATE}.sql.gz
for DB_NAME in ${DB_NAMES}; do
    sleep 1
    DATE=`date +%Y%m%d_%H%M%S`
    ${BIN_DIR}/mysqldump ${MYSQLDUMP_OPT} -u${DB_USER} -p${DB_PASS} ${DB_NAME} > ${BACK_DIR}/${DB_NAME}_${DATE}.sql
    # gzip backup
    # ${BIN_DIR}/mysqldump ${MYSQLDUMP_OPT} -u${DB_USER} -p${DB_PASS} ${DB_NAME} | gzip > ${BACK_DIR}/${DB_NAME}_${DATE}.sql.gz
    [ $? == 0 ] && echo "${DATE}:mysqldump ${DB_NAME} success." >>${BACK_DIR}/../mysqldump_backup.log || echo "${DATE}:mysqldump ${DB_NAME} err,please check." >>${BACK_DIR}/../mysqldump_backup.log
done
echo "==========All databases backups over==========" >>${BACK_DIR}/mysqldump_backup.log

4、某淘宝店卖4种物品:1.手机、2.游艇、3.摩托、4.鼠标。

购买前需要输入用户名和密码。

用户名:tigergao

密码:123456

当用户名和密码不对时,自动退出。

当用户名和密码正确时,进入淘宝店购买商品,可以选择一种自己想买的。

购买后,提示数字对应的商品购买成功。

#!/bin/bash
#auth tigergao
#date 2019-07-16
read -p "请输入你的姓名:" name
 if [ $name == tigergao ];
  then
read -p "请输入你的密码:" passwd
 if [ $passwd == 123456 ];
  then
 echo "登陆成功!"
  cat a.txt
read -p "请输入您要购买的物品:" a
  echo `cat a.txt | grep $a | awk -F '.' '{print $1":"$2}'` "购买成功"
 fi
 else "账号密码错误"
 fi

5、随机生成 1000 个服务器密码:要求包含大写字符,小写字母,数字和特殊字符。

#!/bin/bash
for i in `seq 1 1000`
do
i=$(strings /dev/urandom | grep -o '[0-9a-zA-Z!@#$%^&*()~_+<>?/`]' | head -n 10 | tr -d '\n' | egrep '[0-9]' | egrep '[a-z]' | egrep '[A-Z]' | egrep '[!@#$%^&*()~_+<>?/`]')
echo $i | grep -Ev "^$"
done

顺便再给大家留一个小问题,在 linux 下有那几个命令会实现创建文件呢?这是一道我曾经碰到过的面试题目。看似简单,但是面试官应该是想挖掘基础掌握的牢靠不牢靠。表面看起来简单,但或许不加思考回答上来的并不是面试官真正想要的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值