運維常用shell腳本

注意事項

  1. 開頭加解釋器"#/bin/bash"
  2. 語法縮進,開頭用四個空格;多加註釋說明。
  3. 命名規則:變量名大寫、局部變量小寫、函數名小寫、名字能夠體現實際作用。
  4. 默認變量是全局的,在函數中變量local指定爲局部變量,避免污染其他作用域。
  5. 腳本寫完後一定要先調試再線上使用。

獲取隨機字符串(8位到32位)

  • 方法一
# echo $RANDOM|md5sum|cut -c 1-8
2d29dd8d
  • 方法二
# openssl rand -base64 4
2ET/fA==
  • 方法三
# cat /proc/sys/kernel/random/uuid|cut -c 1-8
7ccdc570

獲取隨機數字

  • 方法一
# cat /proc/sys/kernel/random/uuid|cksum|cut -c 1-8
37069808
  • 方法二
 openssl rand -base64 4|cksum|cut -c 1-8
20272150
  • 方法三
# echo $RANDOM|md5sum|cksum |cut -c 1-8
13997037
  • 方法四
# date +%N|cut -c 1-8
76635150

定義顏色輸出字符創函數

#bin/bash
function echo_color() {
    read color
    if [ $color == "green" ]; then
        echo -e "\033[32;40m$color\033[0m"
    elif [ $color == "red" ]; then
        echo -e "\033[31;40m$color\033[0m"
    fi
}
echo_color

批量創建用戶

#bin/bash
for USER in us_er{8..9}
do
    PASS=`echo $RANDOM|md5sum|cut -c 1-8`
    useradd $USER
    echo "$PASS"|passwd --stdin $USER
    echo -e "$USER:$PASS" >> user_list
    echo "$USER create successful!"
done

檢查軟件包是否安裝

#!/bin/bash
if rpm -q sysstat &>/dev/null; then
    echo "sysstat is already installed."
else
    echo "sysstat is not installed!"
fi

檢查服務狀態

#!/bin/bash
PORT_C=$(ss -anu |grep -c 123)
PS_C=$(ps -ef |grep ntpd |grep -vc grep)
if [ $PORT_C -eq 0 -o $PS_C -eq 0 ]; then
    echo "內容" | mail -s "主題" 郵箱.com
fi

檢查主機存活狀態

#!/bin/bash  
IP_LIST="10 20 30 40"
for IP in $IP_LIST; do
    NUM=1
    while [ $NUM -le 3 ]; do
        if ping -c 1 192.168.1.$IP > /dev/null; then
            echo "192.168.1.$IP Ping is successful."
            break
        else
            # echo "$IP Ping is failure $NUM"
            FAIL_COUNT[$NUM]=192.168.1.$IP
            let NUM++
        fi
    done
    if [ ${#FAIL_COUNT[*]} -eq 3 ];then
        echo "${FAIL_COUNT[1]} Ping is failure!"
        unset FAIL_COUNT[*]
    fi
done

監控cpu、內存使用率

  • 監控cpu
#!/bin/bash
DATE=$(date +%F" "%H:%M)
IP=$( ifconfig br0|awk -F' ' 'NR==2{print $2}')
#IP=$(ifconfig eth0 |awk -F ' :+'   '/inet addr/{print $4}' )  # 只支持CentOS6
MAIL="[email protected]"
if ! which vmstat &>/dev/null; then
    echo "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 ]; then
    echo "
    Date: $DATE
    Host: $IP
    Problem: CPU utilization $USE" | mail -s "CPU Monitor" $MAIL
fi
  • 內存
#!/bin/bash
DATE=$(date +%F" "%H:%M)
IP=$( ifconfig br0|awk -F' ' 'NR==2{print $2}' )
#IP=$(ifconfig eth0 |awk -F  [ :]+   /inet addr/{print $4} )  
MAIL="[email protected]"
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章