例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