mysql36页答案_第十三章 shell常见脚本编写

第十三天 常见shell脚本编写

一、获取随机字符串或数字

1.获取随机8位字符串:

方法1:

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

471b94f2

方法2:

# openssl rand -base64 4

vg3BEg==

方法3:

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

ed9e032c

2.获取随机8位数字:

方法1:

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

23648321

方法2:

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

38571131

方法3:

# date +%N |cut -c 1-8

69024815

ps:cksum:打印CRC效验和统计字节

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

方法1:

function echo_color() {

if [ $1 == "green" ]; then

echo -e "\033[32;40m$2\033[0m"

elif [ $1 == "red" ]; then

echo -e "\033[31;40m$2\033[0m"

fi

}

方法2:

function echo_color() {

case $1 in

green)

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 green "test"

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

三、批量创建用户

#!/bin/bash

#批量添加用户 设置密码

for i in `seq 1 10`

do

if ! id user$i &> /dev/null

then

useradd user$i

echo "123456" | passwd --stdin user$i &> /dev/null

else

echo “user$i exist!”

fi

done

ps:命令:echo t{1..10} | xargs -n1 useradd ,可以更快创建新用户

四、检查软件包是否安装

#!/bin/bash

if rpm -q $! &>/dev/null; then

echo "$1 is already installed."

else

echo "$1 is not installed!"

五、 检查服务状态

#!/bin/bash

#检查服务状态,是否安装

read -p "请输入要检测的服务:" SERVICE

netstat -anp | grep $SERVICE &> /dev/null

if [ $? -eq 0 ]

then

echo "$SERVICE服务已经启动!"

else

rpm -q $SERVICE &> /dev/null

if [ $? -eq 0 ]

then

echo "$SERVICE服务已安装,正在启动...."

service $SERVICE start

else

echo "该服务未安装!"

fi

fi

六、检查主机存活状态

方法1:将错误IP放到数组里面判断是否ping失败三次

#!/bin/bash

IP_LIST="192.168.18.1 192.168.1.1 192.168.18.2"

for IP in $IP_LIST; do

NUM=1

while [ $NUM -le 3 ]; do

if ping -c 1 $IP > /dev/null; then

echo "$IP Ping is successful."

break

else

# echo "$IP Ping is failure $NUM"

FAIL_COUNT[$NUM]=$IP

let NUM++

fi

done

if [ ${#FAIL_COUNT[*]} -eq 3 ];then

echo "${FAIL_COUNT[1]} Ping is failure!"

unset FAIL_COUNT[*]

fi

done

方法2:将错误次数放到FAIL_COUNT变量里面判断是否ping失败三次

#!/bin/bash

IP_LIST="192.168.18.1 192.168.1.1 192.168.18.2"

for IP in $IP_LIST; do

FAIL_COUNT=0

for ((i=1;i<=3;i++)); do

if ping -c 1 $IP >/dev/null; then

echo "$IP Ping is successful."

break

else

# echo "$IP Ping is failure $i"

let FAIL_COUNT++

fi

done

if [ $FAIL_COUNT -eq 3 ]; then

echo "$IP Ping is failure!"

fi

done

方法3:利用for循环将ping通就跳出循环继续,如果不跳出就会走到打印ping失败

#!/bin/bash

ping_success_status() {

if ping -c 1 $IP >/dev/null; then

echo "$IP Ping is successful."

continue

fi

}

IP_LIST="192.168.18.1 192.168.1.1 192.168.18.2"

for IP in $IP_LIST; do

ping_success_status

ping_success_status

ping_success_status

echo "$IP Ping is failure!"

done

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

1.CPU

#!/bin/bash

while true

do

DATE=`date "+%Y-%m-%d %H:%M:%S"`

echo "========================\033[41;36m CPU使用率 ($DATE)\033[0m =========================="

sleep 1

echo "正在获取.........."

sleep 1

echo "正在获取......."

sleep 1

echo "正在获取...."

top -d2 -n5|grep %|awk -F ',' '{print $1,$4}'

#PID=`ps -ef|grep top|awk -F ' ' '{print $2}'`

#kill -9 $PID

echo -e "=====================\033[44;37m 内存使用率 ($DATE)\033[0m============================"

AVAIL=`free -h|grep Mem |awk -F ' ' '{print $7}'`

TOTAL=`free -h|grep Mem |awk -F ' ' '{print $2}'`

echo "avaliable Mem: $AVAIL"

echo "total Mem: $TOTAL"

echo "=====================\033[41;36m CPU使用前10进程 ($DATE)\033[0m======================="

ps auxw|head -1;ps auxw|sort -rn -k 3|head -10

echo "=====================\033[44;37m 内存使用前10进程 ($DATE)\033[0m======================"

ps auxw|head -1;ps auxw|sort -rn -k 4|head -10

sleep 2

done

2.内存

#!/bin/bash

DATE=$(date +%F" "%H:%M)

IP=$(ifconfig eth0 |awk -F '[ :]*' 'NR==2{print $3}')

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 ]; then

echo "

Date: $DATE

Host: $IP

Problem: 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 '[ :]*' 'NR==2{print $3}')

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; do

PART=$(echo $i |cut -d"=" -f1)

USE=$(echo $i |cut -d"=" -f2)

MOUNT=$(echo $i |cut -d"=" -f3)

if [ $USE -gt 80 ]; then

echo "

Date: $DATE

Host: $IP

Total: $TOTAL

Problem: $PART=$USE($MOUNT)

" | mail -s "Disk Monitor" $MAIL

fi

done

八、 批量主机磁盘利用率监控

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

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

#!/bin/bash

HOST_INFO=host.info

for IP in $(awk '/^[^#]/{print $1}' $HOST_INFO); do

USER=$(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.tmp

ssh -p $PORT $USER@$IP 'df -h' > $TMP_FILE

USE_RATE_LIST=$(awk 'BEGIN{OFS="="}/^\/dev/{print $1,int($5)}' $TMP_FILE)

for USE_RATE in $USE_RATE_LIST; do

PART_NAME=${USE_RATE%=*}

USE_RATE=${USE_RATE#*=}

if [ $USE_RATE -ge 80 ]; then

echo "Warning: $PART_NAME Partition usage $USE_RATE%!"

fi

done

done

九、 检查网站可用性

1.检查URL可用性

方法1:

check_url() {

HTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w "%{http_code}" $1)

if [ $HTTP_CODE -ne 200 ]; then

echo "Warning: $1 Access failure!"

fi

}

方法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 ]; then

continue

fi

}

URL_LIST="www.baidu.com www.agasgf.com"

for URL in $URL_LIST; do

check_url $URL

check_url $URL

check_url $URL

echo "Warning: $URL Access failure!"

done

方法2:错误次数保存到变量

#!/bin/bash

URL_LIST="www.baidu.com www.agasgf.com"

for URL in $URL_LIST; do

FAIL_COUNT=0

for ((i=1;i<=3;i++)); do

HTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w "%{http_code}" $URL)

if [ $HTTP_CODE -ne 200 ]; then

let FAIL_COUNT++

else

break

fi

done

if [ $FAIL_COUNT -eq 3 ]; then

echo "Warning: $URL Access failure!"

fi

done

方法3:错误次数保存到数组

#!/bin/bash

URL_LIST="www.baidu.com www.agasgf.com"

for URL in $URL_LIST; do

NUM=1

while [ $NUM -le 3 ]; do

HTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w "%{http_code}" $URL)

if [ $HTTP_CODE -ne 200 ]; then

FAIL_COUNT[$NUM]=$IP #创建数组,以$NUM下标,$IP元素

let NUM++

else

break

fi

done

if [ ${#FAIL_COUNT[*]} -eq 3 ]; then

echo "Warning: $URL Access failure!"

unset FAIL_COUNT[*] #清空数组

fi

done

十、检查MySQL主从同步状态

#!/bin/bash

USER=***

PASSWD=*******

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; do

THREAD_STATUS_NAME=${i%:*}

THREAD_STATUS=${i#*:}

if [ "$THREAD_STATUS" != "Yes" ]; then

echo "Error: MySQL Master-Slave $THREAD_STATUS_NAME status is $THREAD_STATUS!"

fi

done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值