千家信息网

有哪些常用的shell脚本

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,这篇"有哪些常用的shell脚本"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"有哪些
千家信息网最后更新 2025年01月22日有哪些常用的shell脚本

这篇"有哪些常用的shell脚本"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"有哪些常用的shell脚本"文章吧。

先了解下编写Shell过程中注意事项:

开头加解释器:#!/bin/bash语法缩进,使用四个空格;多加注释说明。命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用。默认变量是全局的,在函数中变量local指定为局部变量,避免污染其他作用域。有两个命令能帮助我调试脚本:set -e 遇到执行非0时退出脚本,set-x 打印执行过程。写脚本一定先测试再到生产上。

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

获取随机8位字符串:方法1:# echo $RANDOM |md5sum |cut -c 1-8471b94f2方法2:# openssl rand -base64 4vg3BEg==方法3:# cat /proc/sys/kernel/random/uuid |cut -c 1-8ed9e032c获取随机8位数字:方法1:# echo $RANDOM |cksum |cut -c 1-823648321方法2:# openssl rand -base64 4 |cksum |cut -c 1-838571131方法3:# date +%N |cut -c 1-869024815cksum:打印CRC效验和统计字节

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

方法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 "[32;40m$2[0m"           ;;       red)           echo -e "[31;40m$2[0m"           ;;       *)           echo "Example: echo_color red string"   esac}使用方法:echo_color green "test"function关键字定义一个函数,可加或不加。

3、批量创建用户

#!/bin/bashDATE=$(date +%F_%T)USER_FILE=user.txtecho_color(){   if [ $1 == "green" ]; then       echo -e "[32;40m$2[0m"   elif [ $1 == "red" ]; then       echo -e "[31;40m$2[0m"   fi}# 如果用户文件存在并且大小大于0就备份if [ -s $USER_FILE ]; then   mv $USER_FILE ${USER_FILE}-${DATE}.bak   echo_color green "$USER_FILE exist, rename ${USER_FILE}-${DATE}.bak"fiecho -e "User Password" >> $USER_FILEecho "----------------" >> $USER_FILEfor USER in user{1..10}; do   if ! id $USER &>/dev/null; then       PASS=$(echo $RANDOM |md5sum |cut -c 1-8)       useradd $USER       echo $PASS |passwd --stdin $USER &>/dev/null       echo -e "$USER $PASS" >> $USER_FILE       echo "$USER User create successful."   else       echo_color red "$USER User already exists!"   fidone

4、检查软件包是否安装

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

5、检查服务状态

#!/bin/bashPORT_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 "主题" dst@example.comfi

6、检查主机存活状态

方法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[*]   fidone  方法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;ido       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!"   fidone方法3:利用for循环将ping通就跳出循环继续,如果不跳出就会走到打印ping失败#!/bin/bashping_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

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

1)CPU借助vmstat工具来分析CPU统计信息。#!/bin/bashDATE=$(date +%F" "%H:%M)IP=$(ifconfig eth0 |awk -F  [ :]+   /inet addr/{print $4} )  # 只支持CentOS6MAIL="example@mail.com"if ! which vmstat &>/dev/null; then   echo "vmstat command no found, Please install procps package."   exit 1fiUS=$(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" $MAILfi2)内存#!/bin/bashDATE=$(date +%F" "%H:%M)IP=$(ifconfig eth0 |awk -F  [ :]+   /inet addr/{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 -lt 1024 ]; then   echo "   Date: $DATE   Host: $IP   Problem: Total=$TOTAL,Use=$USE,Free=$FREE   " | mail -s "Memory Monitor" $MAILfi3)硬盘#!/bin/bashDATE=$(date +%F" "%H:%M)IP=$(ifconfig eth0 |awk -F  [ :]+   /inet addr/{print $4} )  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   fidone

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

前提监控端和被监控端SSH免交互登录或者密钥登录。写一个配置文件保存被监控主机SSH连接信息,文件内容格式:IP User Port#!/bin/bashHOST_INFO=host.infofor 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   donedone

9、检查网站可用性

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.com2)判断三次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;ido       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!"   fidone  方法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[*]    #清空数组   fidone

10、检查MySQL主从同步状态

#!/bin/bash  USER=bakPASSWD=123456IO_SQL_STATUS=$(mysql -u$USER -p$PASSWD -e  show slave statusG  |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!"   fidone

以上就是关于"有哪些常用的shell脚本"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

方法 内容 变量 检查 脚本 监控 主机 函数 数组 状态 错误 循环 常用 内存 可用性 字符 字符串 文件 次数 作用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发 数据精确度 网络安全诈骗论文 无锡品牌软件开发诚信合作 青岛应用软件开发公司 远端服务器配置格式错误 迅雷能不能将网页上传到服务器 河间市有没有cs服务器 一个客户向服务器请求 不限字段长度的数据库类型 数据库怎么创建新连接不上去 泸州软件开发首荐青岗科技 济南有实力的存储服务器店面 软件开发显卡推荐 不属于数据库安全范畴 网络安全一年级手抄报图画 台湾学术文献数据库怎么登陆 佛山软件开发公司工资怎么样 简述软件开发生命周期的过程 程序设计基础课后题答案数据库 战地五还有服务器吗 江苏海航软件开发销售 公安信息网络安全培训材料 为什么软件开发不想做了 sql查询数据库三张表 海贝互联网科技有限公司 有发展的社交软件开发 数据库引擎打不开文件mdb 华为服务器装win7开机蓝屏 鄞州手机软件开发商 猫代理服务器
0