shell训练计划30天之第二十一天

例46 网卡和IP

写一个getinterface.sh脚本可以接受[i,I]完成下面人物

当使用格式:grentinterface.sh [-i interface|I-ip]

当用户使用-i选项时,显示指定网卡的IP地址;当用户使用-I选项时,显示其ip所属网卡

例子

sh getinterface.sh -i eth0

sh getinterface.sh -I 192.168.0.1

当用户使用除[i|I]选项时,显示[-i interface | -I ip]此信息

当用户指定信息不符合时,显示错误。(比如指定的eth0没有,而是eth1时)

要点

两个参数$1只能是-i 或者是-I,$2只能是网卡名字或者IP地址

把网卡名字和IP地址写到一个临时文件里备用

 

 

#!/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 "$mysql" ]

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 aeth=$eth '$1==aeth ' /tmpif_ip.txt` | sed "s/$eth//"

echo "网卡$2的IP是 $ip1"

else

echo "你指定的网卡不对,系统中的网卡有:`cat /tmp/ifs.txt|xargs`"

exit

fi

elif [ $1 -eq "-I" ]

then

if grep -qw " $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有:`ip add | grep inet | awk '{print $2}'|awk -F '/' '{print $1}'|xargs`"

exit

fi

else

echo "请输入正确的格式:bash $0 -i 网卡或者 bash $0 -I ip"

fi

 

 

例47 随机3位数字

写一个脚本产生随机3位的数字,并且可以根据用户的输入参数来判断输出几组。比如,脚本的名字为number3.sh

执行方法:

bash number3.sh 会产生一组3位数字

bash number3.sh 10 会产生10组三位数字

要点:

$RANDOM除以10取余 并循环三次

 

#!/bin/bash

get_number()

{

for i in `seq 0 2`

do

a[$i]=$[$RANDOM%10]

done

echo ${a[@]}|sed 's/ //g'

 

}

 

 

if [ $# -eq 0 ]

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

 

例48

要求:写一个shell,先判断是否安装httpd和mysql,没有安装则进行安装,安装了则检查是否启动服务,若没有启动服务则需要启动服务

说明:操作系统为centos6,httpd和mysql全部为rpm包安装

要点:rpm -q 包名 判断是否安装

service xxx start 启动

 

#!/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

systemctl start httpd

fi

else

yum install httpd -y

fi

if_install httpd

if [ $? -eq ]

then

if ! pgrep myusqld >/dev/null

thjen

systemctl start mysqld

fi

else

yum install start mysql-server -y

fi

 

 

 

例49

要求

shell脚本判断输入日志是否合法

比如201701110就是合法日期,20171332就不合法

核心要点

4位年2位月2位日

月的范围为00-12

日的范围为00-31

借助cal命令判断年月日是否合法

 

#!/bin/bash

if [ $# -ne 1 ] || [ ${#1} -ne 8 ]

then

echo "请输入正确的格式,sh $0 yyyymmdd"

exit 1

fi

 

y=`echo ${1:0:4}`

m=`echo ${1:4:2}`

d=`echo ${1:6: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 监控流量

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

1.每10分钟检测一次指定网卡的流量

2.如果流量为0,则重启网卡

要点

sar -n DEV

ifdown xxx;ifup xxx

 

 

#!/bin/bash

LANG=en

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值