Shell练习(46-50)-2019.1.15

46.问候脚本

需求:

  • 写一个getinterface.sh脚本可接受的选项[i,I],完成下面的任务:
  • 使用格式:getinterface.sh [-i interface | -I ip]
  • 当用户使用-i选项时,显示指定的IP地址;当用户使用-I选项时,显示其指定IP所属的网卡,例:sh getinterface.sh -I 192.168.0.1
  • 当用户使用出[-i | -I]选项时,显示[-i interface | -I ip]此信息
  • 当用户指定信息不符合时,显示错误。(比如指定的eth0没有,而是eth1)

核心要点:

  • 把两个参数$1只能是-i或者-i,$2只能是网卡名字或者IP地址
  • 把网卡名字和IP地址写到一个临时文件夹里备用
[root@Chauncey ~]# cat 46.sh
#!/bin/bash
ip add | awk -F ': ' '$1 ~ "^[1-9]" {print $2}' > /tmp/ifs.txt
get_ip()
{
     ip add show dev $1 | grep inet | awk '{print $2}' | awk -F '/ ' '{print $1}'
} 
for eth in `cat /tmp/ifs.txt`
do 
    myip=`get_ip $eth`
    if [ -z "$myip" ]
    then
        echo $eth
    else
        echo $eth $myip
    fi
done > /tmp/if_ip.txt
if [ $# -ne 2 ]
then
    echo "请输入正确的格式:bash $0 -i 网卡 或者 bash $0 -I ip"
    exit
fi
if [ $1 == "-i" ]
then
    if awk '{print $1}' /tmp/if_ip.txt | grep -qw $2
    then 
        eth=$2
        ip1=`awk -v aeth=$eth '$1==aeth' /tmp/if_ip.txt|sed "s/$eth //"`
        echo "网卡$2的ip是 $ip1"
    else
        echo "你指定的网卡不对,系统中的网卡有:`cat /tmp/ifs.txt|xargs`"
        exit
    fi
elif [ $1 == "-I" ] 
then 
    if grep -wq " $2 " /tmp/if_ip.txt
    then
        eth=`grep -w " $2 " /tmp/if_ip.txt|awk '{print $1}'`
        echo "IP $2对应的网卡是$eth"
    else
        echo
             "你指定的网卡不对,系统中的IP有:`ip add | grep inet |awk '{print $2}'|awk -F '/' '{print $1}'|xargs`"
    fi
else
    echo "请输入正确的格式:bash $0 -i 网卡 或者 bash $0 -I ip"
    exit
fi 
[root@Chauncey ~]# sh 46.sh -i eth0
网卡eth0的ip是 172.31.146.106/20
[root@Chauncey ~]# sh 46.sh -i 
请输入正确的格式:bash 46.sh -i 网卡 或者 bash 46.sh -I ip
[root@Chauncey ~]# sh 46.sh -i eth1
你指定的网卡不对,系统中的网卡有:lo eth0
[root@Chauncey ~]# sh 46.sh -i lo
网卡lo的ip是 127.0.0.1/8
[root@Chauncey ~]# 

47.问候脚本

需求:

  • 写一个脚本随机产生3位的数字,并且可以根据用户的输入参数来判断输出几组。比如:脚本的名字为number3.sh。
  • 执行方法:
  • 1)bash number3.sh 会产生一组3位数字
  • 2)bash number3.sh 10 会产生10组3位数字

核心要点:

  • $RANDOM除以10取余
  • 数组
[root@Chauncey ~]# cat 47.sh
#!/bin/bash
get_number()
{
   for i in `seq 0 2`
   do 
       a[$i]=$[$RANDOM%10]
   done
   echo ${a[@]}|sed s'/ //g'
}

if [ $# -eq 1 ]
then
    get_number
elif [ $# -eq 1 ]
then
    n=`echo $1|sed 's/[0-9]//g'`
    if [ -n "n" ]
    then
        echo "给定的参数必须是一个数字"
        exit
    fi
    for i in `seq 1 $1`
    do
      get_number
    done |xargs
else
    echo "格式不对,正确的格式是sh $0 [n],这里的n是一个数字"
fi
[root@Chauncey ~]# 

48.是否安装包

需求:

  • 写一个shell,先判断是否安装httpd和mysql,没有安装进行安装,安装了检查是否启动服务,若没有启动服务则需要启动服务
  • 说明:操作系统位centos6,httpd和mysql全部为rpm包安装。

核心要点:

  • rpm -q包名判断是否安装
  • service XXX start启动
[root@Chauncey ~]# cat  48.sh 
#!/bin/bash
if_install()
{
   rpm -q $1 >/dev/null 2>/dev/null
   if [ $? -eq 0 ]
   then
       echo "$1已经安装"
       return 0
   else
       echo " $1没有安装"
       return 1
   fi
}


if_install httpd
if [ $? -eq 0 ]
then
    if ! pgrep httpd > /dev/null
    then
        service httpd start
    fi
else
     yum install -y httpd
fi


if_install mysql-server
if [ $? -eq 0 ]
then
    if ! pgrep mysqld >/dev/null
    then
        service mysqld start
    fi
else
    yum install -y mysql-server
fi
[root@Chauncey ~]# sh  48.sh httpd
httpd已经安装
service httpd start
mysql-server已经安装

49.日期是否合法

需求:

  • 用shell脚本判断输入的日期是否合法
  • 比如20170110就是合法日志,20171332就不合法

核心要点:

  • 4位年两位月,两位日
  • 月范围00-12
  • 日范围为00-31
  • 借助cal命令判断年月日是否合法
[root@Chauncey ~]# cat 49.sh
#!/bin/bash
if [ $# -ne 1 ] || [ ${#1} -ne 8 ]
then
    echo 
        "请输入正确的格式。sh $0 yyyymmdd"
    exit 1
fi

y=`echo ${1:0:4}`        ######[root@Chauncey ~]# a=123456#echo${a:3:2}45echo ${a:0:4}1234##############对一段字符串进行截取,中括号内第一个字符为字符串的变量,第二位是从字符串第几位,第三位是截取几位
m=`echo ${1:4:2}`
d=`echo ${1:0:2}`

if echo $d|grep -q "^0"
then
    d=`echo ${1:6:2}|sed 's/^0//'`
fi

if cal $m $y >/dev/null 2>/dev/null
then
    if ! cal $m $y |grep -qw "$d"
    then
        echo "你给的日期是不合法的"
    else
        echo "日期合法"
    fi
else
    echo "你给的日期不合法"
fi

50.监控流量

需求:写一个监控网卡的脚本,需要满足一下要求:

  • 每10分钟检测一次指定网卡的流量
  • 如果流量为0,则重启网卡

核心要点:

  • sar -n DEV
  • ifdown XXX; ifup XXX
[root@Chauncey ~]# cat 50.sh
#!/bin/bash
sar -n DEV 1 10 | grep -w "$1" > /tmp/sar.tmp
in=`grep "Average:" /tmp/sar.tmp|awk '{print $5}'|sed 's/\.//'`
out=`grep "Average:" /tmp/sar.tmp|awk '{print $6}'|sed 's/\.//'`

if [ $in == "000" ] && [ $out == "000" ]
then
    ifdown $1
    ifup $1
fi
[root@Chauncey ~]# 

猜你喜欢

转载自blog.csdn.net/Chauncey_Qin/article/details/86486737
今日推荐