有哪些常用的shell脚本
这篇“有哪些常用的shell脚本”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“有哪些常用的shell脚本”文章吧。
开头加解释器:#!/bin/bash语法缩进,使用四个空格;多加注释说明。命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用。默认变量是全局的,在函数中变量local指定为局部变量,避免污染其他作用域。有两个命令能帮助我调试脚本:set-e遇到执行非0时退出脚本,set-x打印执行过程。写脚本一定先测试再到生产上。1、获取随机字符串或数字
获取随机8位字符串:方法1:#echo$RANDOM|md5sum|cut-c1-8471b94f2方法2:#opensslrand-base644vg3BEg==方法3:#cat/proc/sys/kernel/random/uuid|cut-c1-8ed9e032c获取随机8位数字:方法1:#echo$RANDOM|cksum|cut-c1-823648321方法2:#opensslrand-base644|cksum|cut-c1-838571131方法3:#date+%N|cut-c1-869024815cksum:打印CRC效验和统计字节2、定义一个颜色输出字符串函数
方法1:functionecho_color(){if[$1=="green"];thenecho-e"\033[32;40m$2\033[0m"elif[$1=="red"];thenecho-e"\033[31;40m$2\033[0m"fi}方法2:functionecho_color(){case$1ingreen)echo-e"[32;40m$2[0m";;red)echo-e"[31;40m$2[0m";;*)echo"Example:echo_colorredstring"esac}使用方法:echo_colorgreen"test"function关键字定义一个函数,可加或不加。3、批量创建用户
#!/bin/bashDATE=$(date+%F_%T)USER_FILE=user.txtecho_color(){if[$1=="green"];thenecho-e"[32;40m$2[0m"elif[$1=="red"];thenecho-e"[31;40m$2[0m"fi}#如果用户文件存在并且大小大于0就备份if[-s$USER_FILE];thenmv$USER_FILE${USER_FILE}-${DATE}.bakecho_colorgreen"$USER_FILEexist,rename${USER_FILE}-${DATE}.bak"fiecho-e"UserPassword">>$USER_FILEecho"----------------">>$USER_FILEforUSERinuser{1..10};doif!id$USER&>/dev/null;thenPASS=$(echo$RANDOM|md5sum|cut-c1-8)useradd$USERecho$PASS|passwd--stdin$USER&>/dev/nullecho-e"$USER$PASS">>$USER_FILEecho"$USERUsercreatesuccessful."elseecho_colorred"$USERUseralreadyexists!"fidone4、检查软件包是否安装
#!/bin/bashifrpm-qsysstat&>/dev/null;thenecho"sysstatisalreadyinstalled."elseecho"sysstatisnotinstalled!"fi5、检查服务状态
#!/bin/bashPORT_C=$(ss-anu|grep-c123)PS_C=$(ps-ef|grepntpd|grep-vcgrep)if[$PORT_C-eq0-o$PS_C-eq0];thenecho"内容"|mail-s"主题"dst@example.comfi6、检查主机存活状态
方法1:将错误IP放到数组里面判断是否ping失败三次#!/bin/bashIP_LIST="192.168.18.1192.168.1.1192.168.18.2"forIPin$IP_LIST;doNUM=1while[$NUM-le3];doifping-c1$IP>/dev/null;thenecho"$IPPingissuccessful."breakelse#echo"$IPPingisfailure$NUM"FAIL_COUNT[$NUM]=$IPletNUM++fidoneif[${#FAIL_COUNT[*]}-eq3];thenecho"${FAIL_COUNT[1]}Pingisfailure!"unsetFAIL_COUNT[*]fidone方法2:将错误次数放到FAIL_COUNT变量里面判断是否ping失败三次#!/bin/bashIP_LIST="192.168.18.1192.168.1.1192.168.18.2"forIPin$IP_LIST;doFAIL_COUNT=0for((i=1;idoifping-c1$IP>/dev/null;thenecho"$IPPingissuccessful."breakelse#echo"$IPPingisfailure$i"letFAIL_COUNT++fidoneif[$FAIL_COUNT-eq3];thenecho"$IPPingisfailure!"fidone方法3:利用for循环将ping通就跳出循环继续,如果不跳出就会走到打印ping失败#!/bin/bashping_success_status(){ifping-c1$IP>/dev/null;thenecho"$IPPingissuccessful."continuefi}IP_LIST="192.168.18.1192.168.1.1192.168.18.2"forIPin$IP_LIST;doping_success_statusping_success_statusping_success_statusecho"$IPPingisfailure!"done7、监控CPU、内存和硬盘利用率
1)CPU借助vmstat工具来分析CPU统计信息。#!/bin/bashDATE=$(date+%F""%H:%M)IP=$(ifconfigeth0|awk-F[:]+/inetaddr/{print$4})#只支持CentOS6MAIL="example@mail.com"if!whichvmstat&>/dev/null;thenecho"vmstatcommandnofound,Pleaseinstallprocpspackage."exit1fiUS=$(vmstat|awkNR==3{print$13})SY=$(vmstat|awkNR==3{print$14})IDLE=$(vmstat|awkNR==3{print$15})WAIT=$(vmstat|awkNR==3{print$16})USE=$(($US+$SY))if[$USE-ge50];thenecho"Date:$DATEHost:$IPProblem:CPUutilization$USE"|mail-s"CPUMonitor"$MAILfi2)内存#!/bin/bashDATE=$(date+%F""%H:%M)IP=$(ifconfigeth0|awk-F[:]+/inetaddr/{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-lt1024];thenecho"Date:$DATEHost:$IPProblem:Total=$TOTAL,Use=$USE,Free=$FREE"|mail-s"MemoryMonitor"$MAILfi3)硬盘#!/bin/bashDATE=$(date+%F""%H:%M)IP=$(ifconfigeth0|awk-F[:]+/inetaddr/{print$4})MAIL="example@mail.com"TOTAL=$(fdisk-l|awk-F[:]+BEGIN{OFS="="}/^Disk/dev/{printf"%s=%sG,",$2,$3})PART_USE=$(df-h|awkBEGIN{OFS="="}/^/dev/{print$1,int($5),$6})foriin$PART_USE;doPART=$(echo$i|cut-d"="-f1)USE=$(echo$i|cut-d"="-f2)MOUNT=$(echo$i|cut-d"="-f3)if[$USE-gt80];thenecho"Date:$DATEHost:$IPTotal:$TOTALProblem:$PART=$USE($MOUNT)"|mail-s"DiskMonitor"$MAILfidone8、批量主机磁盘利用率监控
前提监控端和被监控端SSH免交互登录或者密钥登录。写一个配置文件保存被监控主机SSH连接信息,文件内容格式:IPUserPort#!/bin/bashHOST_INFO=host.infoforIPin$(awk/^[^#]/{print$1}$HOST_INFO);doUSER=$(awk-vip=$IPip==$1{print$2}$HOST_INFO)PORT=$(awk-vip=$IPip==$1{print$3}$HOST_INFO)TMP_FILE=/tmp/disk.tmpssh-p$PORT$USER@$IPdf-h>$TMP_FILEUSE_RATE_LIST=$(awkBEGIN{OFS="="}/^/dev/{print$1,int($5)}$TMP_FILE)forUSE_RATEin$USE_RATE_LIST;doPART_NAME=${USE_RATE%=*}USE_RATE=${USE_RATE#*=}if[$USE_RATE-ge80];thenecho"Warning:$PART_NAMEPartitionusage$USE_RATE%!"fidonedone9、检查网站可用性
1)检查URL可用性方法1:check_url(){HTTP_CODE=$(curl-o/dev/null--connect-timeout3-s-w"%{http_code}"$1)if[$HTTP_CODE-ne200];thenecho"Warning:$1Accessfailure!"fi}方法2:check_url(){if!wget-T10--tries=1--spider$1>/dev/null2>&1;then#-T超时时间,--tries尝试1次,--spider爬虫模式echo"Warning:$1Accessfailure!"fi}使用方法:check_urlwww.baidu.com2)判断三次URL可用性思路与上面检查主机存活状态一样。方法1:利用循环技巧,如果成功就跳出当前循环,否则执行到最后一行#!/bin/bashcheck_url(){HTTP_CODE=$(curl-o/dev/null--connect-timeout3-s-w"%{http_code}"$1)if[$HTTP_CODE-eq200];thencontinuefi}URL_LIST="www.baidu.comwww.agasgf.com"forURLin$URL_LIST;docheck_url$URLcheck_url$URLcheck_url$URLecho"Warning:$URLAccessfailure!"done方法2:错误次数保存到变量#!/bin/bashURL_LIST="www.baidu.comwww.agasgf.com"forURLin$URL_LIST;doFAIL_COUNT=0for((i=1;idoHTTP_CODE=$(curl-o/dev/null--connect-timeout3-s-w"%{http_code}"$URL)if[$HTTP_CODE-ne200];thenletFAIL_COUNT++elsebreakfidoneif[$FAIL_COUNT-eq3];thenecho"Warning:$URLAccessfailure!"fidone方法3:错误次数保存到数组#!/bin/bashURL_LIST="www.baidu.comwww.agasgf.com"forURLin$URL_LIST;doNUM=1while[$NUM-le3];doHTTP_CODE=$(curl-o/dev/null--connect-timeout3-s-w"%{http_code}"$URL)if[$HTTP_CODE-ne200];thenFAIL_COUNT[$NUM]=$IP#创建数组,以$NUM下标,$IP元素letNUM++elsebreakfidoneif[${#FAIL_COUNT[*]}-eq3];thenecho"Warning:$URLAccessfailure!"unsetFAIL_COUNT[*]#清空数组fidone10、检查MySQL主从同步状态
#!/bin/bashUSER=bakPASSWD=123456IO_SQL_STATUS=$(mysql-u$USER-p$PASSWD-eshowslavestatusG|awk-F:/Slave_.*_Running/{gsub(":",":");print$0})#gsub去除冒号后面的空格foriin$IO_SQL_STATUS;doTHREAD_STATUS_NAME=${i%:*}THREAD_STATUS=${i#*:}if["$THREAD_STATUS"!="Yes"];thenecho"Error:MySQLMaster-Slave$THREAD_STATUS_NAMEstatusis$THREAD_STATUS!"fidone
以上就是关于“有哪些常用的shell脚本”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。