获取随机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
定义一个颜色输出字符串函数
方法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”
function关键字定义一个函数,可加或不加。
批量创建用户
#!/bin/bash
DATE=$(date +%F_%T)
USER_FILE=user.txt
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
}
如果用户文件存在并且大小大于0就备份
if [ -s $USER_FILE ]; then
mv $USER_FILE
U
S
E
R
F
I
L
E
−
{USER_FILE}-
USERFILE−{DATE}.bak
echo_color green “$USER_FILE exist, rename
U
S
E
R
F
I
L
E
−
{USER_FILE}-
USERFILE−{DATE}.bak”
fi
echo -e “User\tPassword” >> $USER_FILE
echo “----------------” >> $USER_FILE
for USER in user{1…10}; do
if ! id KaTeX parse error: Expected 'EOF', got '&' at position 6: USER &̲>/dev/null; the…(echo $RANDOM |md5sum |cut -c 1-8)
useradd $USER
echo $PASS |passwd --stdin KaTeX parse error: Expected 'EOF', got '&' at position 6: USER &̲>/dev/null …USER\t$PASS" >>
U
S
E
R
F
I
L
E
e
c
h
o
"
USER_FILE echo "
USERFILEecho"USER User create successful."
else
echo_color red “$USER User already exists!”
fi
done
借助vmstat工具来分析CPU统计信息。
#!/bin/bash
DATE=
(
d
a
t
e
+
I
P
=
(date +%F" "%H:%M) IP=
(date+IP=(ifconfig eth0 |awk -F ‘[ :]+’ '/inet addr/{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 4}̲') # 只支持CentOS…(vmstat |awk 'NR3{print KaTeX parse error: Expected 'EOF', got '}' at position 3: 13}̲') SY=(vmstat |awk 'NR3{print KaTeX parse error: Expected 'EOF', got '}' at position 3: 14}̲') IDLE=(vmstat |awk 'NR3{print KaTeX parse error: Expected 'EOF', got '}' at position 3: 15}̲') WAIT=(vmstat |awk 'NR3{print KaTeX parse error: Expected 'EOF', got '}' at position 3: 16}̲') USE=((
U
S
+
US+
US+SY))
if [ $USE -ge 50 ]; then
echo "
Date: $DATE
Host: $IP
Problem: CPU utilization $USE
" | mail -s “CPU Monitor” $MAIL
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
I
P
>
/
d
e
v
/
n
u
l
l
;
t
h
e
n
e
c
h
o
"
IP > /dev/null; then echo "
IP>/dev/null;thenecho"IP Ping is successful."
break
else
# echo “$IP Ping is failure
N
U
M
"
F
A
I
L
C
O
U
N
T
[
NUM" FAIL_COUNT[
NUM"FAILCOUNT[NUM]=$IP
let NUM++
fi
done
if [ KaTeX parse error: Expected '}', got '#' at position 2: {#̲FAIL_COUNT[*]} …{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
I
P
>
/
d
e
v
/
n
u
l
l
;
t
h
e
n
e
c
h
o
"
IP >/dev/null; then echo "
IP>/dev/null;thenecho"IP Ping is successful."
break
else
# echo “$IP Ping is failure $i”
let FAIL_COUNT++
fi
done
if [
F
A
I
L
C
O
U
N
T
−
e
q
3
]
;
t
h
e
n
e
c
h
o
"
FAIL_COUNT -eq 3 ]; then echo "
FAILCOUNT−eq3];thenecho"IP Ping is failure!"
fi
done
方法3:利用for循环将ping通就跳出循环继续,如果不跳出就会走到打印ping失败
#!/bin/bash
ping_success_status() {
if ping -c 1
I
P
>
/
d
e
v
/
n
u
l
l
;
t
h
e
n
e
c
h
o
"
IP >/dev/null; then echo "
IP>/dev/null;thenecho"IP Ping is successful."
continue
fi
}
IP_LIST=“192.168.18.1 192.168.1.1 192.168.18.2”
for IP in
I
P
L
I
S
T
;
d
o
p
i
n
g
s
u
c
c
e
s
s
s
t
a
t
u
s
p
i
n
g
s
u
c
c
e
s
s
s
t
a
t
u
s
p
i
n
g
s
u
c
c
e
s
s
s
t
a
t
u
s
e
c
h
o
"
IP_LIST; do ping_success_status ping_success_status ping_success_status echo "
IPLIST;dopingsuccessstatuspingsuccessstatuspingsuccessstatusecho"IP Ping is failure!"
done
监控CPU、内存和硬盘利用率
1)CPU
借助vmstat工具来分析CPU统计信息。
#!/bin/bash
DATE=
(
d
a
t
e
+
I
P
=
(date +%F" "%H:%M) IP=
(date+IP=(ifconfig eth0 |awk -F ‘[ :]+’ '/inet addr/{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 4}̲') # 只支持CentOS…(vmstat |awk 'NR3{print KaTeX parse error: Expected 'EOF', got '}' at position 3: 13}̲') SY=(vmstat |awk 'NR3{print KaTeX parse error: Expected 'EOF', got '}' at position 3: 14}̲') IDLE=(vmstat |awk 'NR3{print KaTeX parse error: Expected 'EOF', got '}' at position 3: 15}̲') WAIT=(vmstat |awk 'NR3{print KaTeX parse error: Expected 'EOF', got '}' at position 3: 16}̲') USE=((
U
S
+
US+
US+SY))
if [ $USE -ge 50 ]; then
echo "
Date: $DATE
Host: $IP
Problem: CPU utilization $USE
" | mail -s “CPU Monitor” $MAIL
fi
2)内存
#!/bin/bash
DATE=
(
d
a
t
e
+
I
P
=
(date +%F" "%H:%M) IP=
(date+IP=(ifconfig eth0 |awk -F ‘[ :]+’ '/inet addr/{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 4}̲') MAIL="exam…(free -m |awk '/Mem/{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 2}̲') USE=(free -m |awk '/Mem/{print $3-$6-KaTeX parse error: Expected 'EOF', got '}' at position 2: 7}̲') FREE=((
T
O
T
A
L
−
TOTAL-
TOTAL−USE))
#内存小于1G发送报警邮件
if [ $FREE -lt 1024 ]; then
echo "
Date: $DATE
Host:
I
P
P
r
o
b
l
e
m
:
T
o
t
a
l
=
IP Problem: Total=
IPProblem:Total=TOTAL,Use=
U
S
E
,
F
r
e
e
=
USE,Free=
USE,Free=FREE
" | mail -s “Memory Monitor” $MAIL
fi
3)硬盘
#!/bin/bash
DATE=
(
d
a
t
e
+
I
P
=
(date +%F" "%H:%M) IP=
(date+IP=(ifconfig eth0 |awk -F ‘[ :]+’ ‘/inet addr/{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 4}̲') MAIL="exam…(fdisk -l |awk -F’[: ]+’ 'BEGIN{OFS="="}/^Disk /dev/{printf “%s=%sG,”,$2,KaTeX parse error: Expected 'EOF', got '}' at position 2: 3}̲') PART_USE=(df -h |awk ‘BEGIN{OFS="="}/^/dev/{print $1,int($5),$6}’)
for i in
P
A
R
T
U
S
E
;
d
o
P
A
R
T
=
PART_USE; do PART=
PARTUSE;doPART=(echo
i
∣
c
u
t
−
d
"
=
"
−
f
1
)
U
S
E
=
i |cut -d"=" -f1) USE=
i∣cut−d"="−f1)USE=(echo
i
∣
c
u
t
−
d
"
=
"
−
f
2
)
M
O
U
N
T
=
i |cut -d"=" -f2) MOUNT=
i∣cut−d"="−f2)MOUNT=(echo $i |cut -d"=" -f3)
if [ $USE -gt 80 ]; then
echo "
Date: $DATE
Host: $IP
Total: $TOTAL
Problem:
P
A
R
T
=
PART=
PART=USE($MOUNT)
" | mail -s “Disk Monitor” $MAIL
fi
done
检查MySQL主从同步状态
#!/bin/bash
USER=bak
PASSWD=123456
IO_SQL_STATUS=
(
m
y
s
q
l
−
u
(mysql -u
(mysql−uUSER -p$PASSWD -e ‘show slave status\G’ |awk -F: '/Slave_._Running/{gsub(": “,”😊;print $0}’) #gsub去除冒号后面的空格
for i in
I
O
S
Q
L
S
T
A
T
U
S
;
d
o
T
H
R
E
A
D
S
T
A
T
U
S
N
A
M
E
=
IO_SQL_STATUS; do THREAD_STATUS_NAME=
IOSQLSTATUS;doTHREADSTATUSNAME={i%:}
THREAD_STATUS=KaTeX parse error: Expected '}', got '#' at position 3: {i#̲*:} if [ "THREAD_STATUS" != “Yes” ]; then
echo “Error: MySQL Master-Slave $THREAD_STATUS_NAME status is $THREAD_STATUS!”
fi
done
判断输入是否为数字
方法1:
if [[
1
=
[
0
−
9
]
+
1 =~ ^[0-9]+
1= [0−9]+ ]]; then
echo “Is Number.”
else
echo “No Number.”
fi
方法2:
if [ $1 -gt 0 ] 2>/dev/null; then
echo “Is Number.”
else
echo “No Number.”
fi
方法3:
echo $1 |awk ‘{print 0 / [ 0 − 9 ] + 0~/^[0-9]+ 0 /[0−9]+/?“Is Number.”:“No Number.”}’ #三目运算符