shell脚本各种方法

获取随机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 " FAILCOUNTeq3];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- TOTALUSE))
#内存小于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= icutd"="f1)USE=(echo i ∣ c u t − d " = " − f 2 ) M O U N T = i |cut -d"=" -f2) MOUNT= icutd"="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 (mysqluUSER -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= [09]+ ]]; 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 /[09]+/?“Is Number.”:“No Number.”}’ #三目运算符

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值