1 获取随机字符串或数字

获取随机8位字符串:

Method One

echo $RANDOM |md5sum |cut -c 1-8

Method Two

openssl rand -base64 4

Method Three

cat /proc/sys/kernel/random/uuid |cut -c 1-8

获取随机8位数字:

Method One

echo $RANDOM |cksum |cut -c 1-8

Method Two

openssl rand -base64 4 |cksum |cut -c 1-8

Method Three

date +%N |cut -c 1-8

2 定义一个颜色输出字符串函数

Method one

#!/bin/bashfunction echo_color() {if [ $1 == "green" ]; thenecho -e "\033[32;40m$2\033[0m"elif [ $1 == "red" ]; thenecho -e "\033[31;40m$2\033[0m"fi
}echo_color red "test"

Method Two

#!/bin/bashfunction echo_color() {case $1 ingreen)echo -e "\033[32;40m$2\033[0m";;red)echo -e "\033[31;40m$2\033[0m" ;;*) echo "Example: echo_color red string"esac
}
echo_color red "我爱你"

function关键字定义一个函数,可加或不加。

3 批量创建用户

#!/bin/bash
DATE=$(date +%F_%T)
USER_FILE=user.txt
echo_color(){if [ $1 == "green" ]; thenecho -e "\033[32;40m$2\033[0m"elif [ $1 == "red" ]; thenecho -e "\033[31;40m$2\033[0m"fi
}# 如果用户文件存在并且大小大于0就备份
if [ -s $USER_FILE ]; thenmv $USER_FILE ${USER_FILE}-${DATE}.bakecho_color green "$USER_FILE exist, rename ${USER_FILE}-${DATE}.bak"
fi
echo -e "User\tPassword" >> $USER_FILE
echo "----------------" >> $USER_FILE
for USER in user{1..10}; doif ! id $USER &>/dev/null; thenPASS=$(echo $RANDOM |md5sum |cut -c 1-8)useradd $USERecho $PASS |passwd --stdin $USER &>/dev/nullecho -e "$USER\t$PASS" >> $USER_FILEecho "$USER User create successful."elseecho_color red "$USER User already exists!"fi
done


4 检查软件包是否安装

[root@server shell]# cat install.sh
#!/bin/bash
if rpm -q $1 &>/dev/null; thenecho "$1 is already installed."
elseecho "$1 is not installed!"
fi

5 检查主机存活状态

#!/bin/bash
IP_LIST="172.25.6.250 172.25.6.1 172.25.6.2 114.114.114.114"
for IP in $IP_LIST; doNUM=1while [ $NUM -le 3 ]; doif ping -c 1 $IP > /dev/null; thenecho "$IP Ping is successful."breakelse# echo "$IP Ping is failure $NUM"FAIL_COUNT[$NUM]=$IPlet NUM++fidoneif [ ${#FAIL_COUNT[*]} -eq 3 ];thenecho "${FAIL_COUNT[1]} Ping is failure!"unset FAIL_COUNT[*]fi
done

6 监控CPU、内存和硬盘利用率

1)CPU

借助vmstat工具来分析CPU统计信息。

#!/bin/bash
DATE=$(date +%F" "%H:%M)
IP=$(ifconfig eth0 |awk -F '[ :]+' '/inet addr/{print $4}')  # 只支持CentOS6
MAIL="example@mail.com"
if ! which vmstat &>/dev/null; thenecho "vmstat command no found, Please install procps package." exit 1
fi
US=$(vmstat |awk 'NR==3{print $13}')
SY=$(vmstat |awk 'NR==3{print $14}')
IDLE=$(vmstat |awk 'NR==3{print $15}')
WAIT=$(vmstat |awk 'NR==3{print $16}')
USE=$(($US+$SY))
if [ $USE -ge 50 ]; thenecho "Date: $DATEHost: $IPProblem: CPU utilization $USE" | mail -s "CPU Monitor" $MAIL
fi

2)内存

#!/bin/bash
DATE=$(date +%F" "%H:%M)
IP=$(ifconfig eth0 |awk -F '[ :]+' '/inet addr/{print $4}')
MAIL="example@mail.com"
TOTAL=$(free -m |awk '/Mem/{print $2}')
USE=$(free -m |awk '/Mem/{print $3-$6-$7}')
FREE=$(($TOTAL-$USE))
# 内存小于1G发送报警邮件
if [ $FREE -lt 1024 ]; thenecho "Date: $DATEHost: $IPProblem: Total=$TOTAL,Use=$USE,Free=$FREE" | mail -s "Memory Monitor" $MAIL
fi

3)硬盘

#!/bin/bash
DATE=$(date +%F" "%H:%M)
IP=$(ifconfig eth0 |awk -F '[ :]+' '/inet addr/{print $4}')
MAIL="example@mail.com"
TOTAL=$(fdisk -l |awk -F'[: ]+' 'BEGIN{OFS="="}/^Disk \/dev/{printf "%s=%sG,",$2,$3}')
PART_USE=$(df -h |awk 'BEGIN{OFS="="}/^\/dev/{print $1,int($5),$6}')
for i in $PART_USE; doPART=$(echo $i |cut -d"=" -f1)USE=$(echo $i |cut -d"=" -f2)MOUNT=$(echo $i |cut -d"=" -f3)if [ $USE -gt 80 ]; thenecho "Date: $DATEHost: $IPTotal: $TOTALProblem: $PART=$USE($MOUNT)" | mail -s "Disk Monitor" $MAILfi
done

7 批量主机磁盘利用率监控

前提监控端和被监控端SSH免交互登录或者密钥登录。

写一个配置文件保存被监控主机SSH连接信息,文件内容格式:IP User Port

#!/bin/bash
HOST_INFO=host.info
for IP in $(awk '/^[^#]/{print $1}' $HOST_INFO); doUSER=$(awk -v ip=$IP 'ip==$1{print $2}' $HOST_INFO)PORT=$(awk -v ip=$IP 'ip==$1{print $3}' $HOST_INFO)TMP_FILE=/tmp/disk.tmpssh -p $PORT $USER@$IP 'df -h' > $TMP_FILEUSE_RATE_LIST=$(awk 'BEGIN{OFS="="}/^\/dev/{print $1,int($5)}' $TMP_FILE)for USE_RATE in $USE_RATE_LIST; doPART_NAME=${USE_RATE%=*}USE_RATE=${USE_RATE#*=}if [ $USE_RATE -ge 80 ]; thenecho "Warning: $PART_NAME Partition usage $USE_RATE%!"fidone
done

8 检查网站可用性

1)检查URL可用性

方法1:
check_url() {HTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w "%{http_code}" $1)if [ $HTTP_CODE -ne 200 ]; thenecho "Warning: $1 Access failure!"fi
}
check_url www.baidu.com方法2:
check_url() {
if ! wget -T 10 --tries=1 --spider $1 >/dev/null 2>&1; then
#-T超时时间,--tries尝试1次,--spider爬虫模式echo "Warning: $1 Access failure!"fi
}
check_url www.baidu.com

2)判断三次URL可用性

思路与上面检查主机存活状态一样。

方法1:利用循环技巧,如果成功就跳出当前循环,否则执行到最后一行
#!/bin/bash
check_url() {HTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w "%{http_code}" $1)if [ $HTTP_CODE -eq 200 ]; thencontinuefi
}
URL_LIST="www.baidu.com www.agasgf.com"
for URL in $URL_LIST; docheck_url $URLcheck_url $URLcheck_url $URLecho "Warning: $URL Access failure!"
done
方法2:错误次数保存到变量
#!/bin/bash
URL_LIST="www.baidu.com www.agasgf.com"
for URL in $URL_LIST; doFAIL_COUNT=0for ((i=1;i<=3;i++)); doHTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w "%{http_code}" $URL)if [ $HTTP_CODE -ne 200 ]; thenlet FAIL_COUNT++elsebreakfidoneif [ $FAIL_COUNT -eq 3 ]; thenecho "Warning: $URL Access failure!"fi
done
方法3:错误次数保存到数组
#!/bin/bash
URL_LIST="www.baidu.com www.agasgf.com"
for URL in $URL_LIST; doNUM=1while [ $NUM -le 3 ]; doHTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w "%{http_code}" $URL)if [ $HTTP_CODE -ne 200 ]; thenFAIL_COUNT[$NUM]=$IP  #创建数组,以$NUM下标,$IP元素let NUM++elsebreakfidoneif [ ${#FAIL_COUNT[*]} -eq 3 ]; thenecho "Warning: $URL Access failure!"unset FAIL_COUNT[*]    #清空数组fi
done

9 检查MySQL主从同步状态

#!/bin/bash
USER=bak
PASSWD=123456
IO_SQL_STATUS=$(mysql -u$USER -p$PASSWD -e 'show slave status\G' |awk -F: '/Slave_.*_Running/{gsub(": ",":");print $0}')  #gsub去除冒号后面的空格
for i in $IO_SQL_STATUS; doTHREAD_STATUS_NAME=${i%:*}THREAD_STATUS=${i#*:}if [ "$THREAD_STATUS" != "Yes" ]; thenecho "Error: MySQL Master-Slave $THREAD_STATUS_NAME status is $THREAD_STATUS!"fi
done

面试前临时抱佛脚——常见的Shell脚本面试题相关推荐

  1. (13)FPGA面试技能提升篇(Shell脚本)

    1.1 FPGA面试技能提升篇13(Shell脚本) 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试技能提升篇13(Shell脚本): 5)结束语. 1.1 ...

  2. shell for循环命令行_精心汇总的24道shell脚本面试题

    虽然现在Python在运维工作中已经使用很普遍,但是很多企业在找Linux云计算工程师的时候还是会问到 shell 脚本的问题,它有助于你在工作环境中自动完成很多任务. 如下是一些面试过程中,经常会遇 ...

  3. shell for循环命令行_24 道 shell 脚本面试题

    想要成为中高级phper, shell 脚本是需要掌握的,它有助于你在工作环境中自动完成很多任务. 如下是一些面试过程中,经常会遇到的 shell 脚本面试问题及解答: Q:1 Shell脚本是什么. ...

  4. shell脚本面试题

    Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件( ...

  5. 初级软件测试面试前需要做什么准备?面试题可以去哪里找?

    最近几年,随着电子产品和互联网的蓬勃发展,各类科技公司如雨后春笋般出现,而软件公司作为科技类公司中的重要组成部分,在这支互联网大军中也占据了重要一席.因而,负责软件问题质检的软件测试岗位也逐渐成了这几 ...

  6. java面试上机_常见的Java上机面试题

    常见的 Java 上机面试题 在程序员面试中, 主要的考试形式分为笔试和上机编程考试两部分. 笔试主要考查面试者的 基础是否牢固:上机考试主要考查面试者的实际开发能力和技术技巧. 上机编程考试,要求面 ...

  7. 面试前必须要知道的Redis面试题

    前言 回顾前面: 从零单排学Redis[青铜] 从零单排学Redis[白银] 从零单排学Redis[黄金] 从零单排学Redis[铂金一] 从零单排学Redis[铂金二] Redis 今天来分享一下R ...

  8. Linux–shell脚本

    知识点和问题 1.Shell是什么 2.Shell编程快速入门 3.Shell的变量 4.Shell变量的定义 5.定义变量的规则 6.将命令的返回值赋给变量 7.设置环境变量 8.位置参数变量 9. ...

  9. 几种常见的Shell

    上面提到过,Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本. Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把它们称作一种Shell.我们常说 ...

最新文章

  1. 无限极:对虚假宣传行为查处不力 推十条整改措施
  2. java foreach 删除_为什么java不要在foreach循环里进行元素的remove/add操作
  3. 阿里云centos 7.6安装mysql_阿里云服务器中Linux下centos7.6安装mysql8.0.11
  4. 个人阅读的Deep Learning方向的paper整理
  5. GDCM:gdcm::Image的测试程序
  6. php判断当前时间是否跨月,判断日期是否能跨月查询的js代码_javascript技巧
  7. How to get ABAP code coverage result
  8. 常见Orcale报错问题解决办法
  9. CF1110E-Magic Stones【结论题,差分】
  10. Spring bean 不被 GC 的真正原因
  11. C++ 重载数学运算符
  12. fckeditor零碎要点---3.FCK:editor instanceName=myeditor value=李德伟欢迎您 height=400/FCK:editor
  13. java调用hp打印机驱动_惠普打印机驱动修改JDK问题–现象:javac不能用了 | 学步园...
  14. juniper防火墙策略元素
  15. 设置或者获取CheckboxList控件的选中值
  16. 基础集合论 第一章 7 交集 8 差集
  17. wxWindows 第一个Frame程序
  18. python数据分析百度云资源_数据分析师视频教程百度云网盘下载
  19. HTML语法结构及规范
  20. html中加js弹窗,前端html+css+js弹窗的实现

热门文章

  1. R语言ggplot2可视化(facet图)使得第一个子图的坐标轴范围一致
  2. Python中pandas检查dataframe中是否包含某个字段、或者数据列实战、检查dataframe中是否包含某个字段集合
  3. R语言nrow函数获取dataframe或者matrix行计数统计
  4. 推荐系统+覆盖率(coverage)
  5. Keras训练神经网络进行分类并使用GridSearchCV进行参数寻优
  6. 数据挖掘应用于流失分析的整体思路
  7. 广东深圳计算机学校排名2015年,2015年深圳小学综合排名 各区小学最新排名
  8. Ajax基础和Json基础
  9. 【英文文本分类实战】之三——数据清洗
  10. SRTP是如何工作的