shell编程阶段性总结+几个shell脚本实例

        学习shell有一段时间了,之前也整理了一些shell的基础语法,今天来做一个阶段性总结,另外还有几个脚本实例供大家参考学习。

总结脑图

脚本实例

1.判读两台主机是否ping通

#!/bin/env bash
#该脚本用于判断当前主机是否和远程主机互通
#交互式定义变量,用户自己决定ping哪个主机
read -p "请输入你要ping的主机IP:" ip
#使用ping程序判断主机是否互通
ping -cl $ip $>/dev/null
if [ $? -eq 0 ];then
echo "当前主机与远程主机$ip是互通的"
else "当前主机和远程主机$ip不通"
fi

2.判断一个进程是否存在

思路: 

        查看进程的相关命令(ps top pgrep tes)--根据命令的返回状态值来判断进程是否存在--根据逻辑用脚本语言实现

ps -ef|grep httpd

echo $?
ps -ef|grep httpd|grep -v 'grep'
 service apache start
 echo $?
 service apache start
 pgrep --help
 pgrep httpd
 echo $?
 service apache start
 pgrep httpd
 echo $?

pgrep命令:以名称为依据从运行进程队列中查找进程,并显示查找到的进程id

选项:

  • -o:仅显示找到的最小起始进程号
  • -n:仅显示找到的最大结束进程号
  • -l:显示进程名称
  • -p:指定父进程号
  • -g:指定进程组
#!/bin/env bash
pgrep httpd &>/dev/null
if [ $? -ne 0 ];then
echo "当前httpd进程不存在"
else
echo "当前httpd进程存在"
fi


test $? -eq o && echo "当前httpd进程存在" || echo "当前httpd进程不存在"

3.判断一个服务是否正常

思路:

      可以判断进程是否存在,用/etc/init.d/httpd status判断状态等方法 最好的办法是直接去访问一下,通过访问成功和失败的返回值来判断

使用指令wget、curl、elinks -dump

#!/bin/env bash
#判断门户网站能否正常提供服务

web_server=www.itcast.cn
wget $web-server $>/dev/null
[ $? -eq 0] && echo "当前网站ok" || echo "当前网站不ok,请立刻处理"

 4.计算1-100以内的所有奇数和

#!/bin/env bash
#计算1-100之间的奇数的和
#定义变量来保存奇数和


sum=0
for i in {1..100..2}
  do
        let sum=$sum+i
  done
echo "1-100以内的所有奇数的和为:" $sum

5.局域网内检查主机网络通讯情况

#!/bin/env bash
#定义变量
ip=10.1.1
#循环ping主机
for ((i=1;i<=10;i++))
do
ping -c1 $ip.$i &>/dev/null
if [ $? -eq 0 ];then
echo "$ip.$i is ok" >> /tmp/ip_up.txt
else
echo "$ip.$i is down" >> /tmp/ip_down.txt
fi
done

      在do done之间加一个{}&,完成时间会快很多

root@lijingtest-VirtualBox:~# time ./ping.sh
局域网内的IP网络检测完毕

real	1m20.077s
user	0m0.011s
sys	0m0.007s
root@lijingtest-VirtualBox:~# vim ping.sh
root@lijingtest-VirtualBox:~# chmod +x ping.sh
root@lijingtest-VirtualBox:~# 
root@lijingtest-VirtualBox:~# 
root@lijingtest-VirtualBox:~# time ./ping.sh
局域网内的IP网络检测完毕

real	0m10.020s
user	0m0.014s
sys	0m0.007s
root@lijingtest-VirtualBox:~# 

6.随机产生以139开头的电话号码

具体需求:

      写一个脚本,产生一个phonenum.txt文件,随机产生以139开头的手机号1000个,每个一行。

思路:

  • 产生1000个电话号码,脚本需要循环1000次 for while until
  • 139+8位,后8位随机产生,可以让每一位数字都随机产生 echo $[$RANDOM%10]
  • 将随机产生的数字保存到变量里,然后加上139保存到文件里

实现:

#!/bin/bash
#随机产生1000个以139开头的号码并保存到文件中


file=/root/phonenum.txt
for ((i=1;i<=1000;i++))
do
 n1=$[#RANDOM%10]
 n2=$[#RANDOM%10]
 n3=$[#RANDOM%10]
 n4=$[#RANDOM%10]
 n5=$[#RANDOM%10]
 n6=$[#RANDOM%10]
 n7=$[#RANDOM%10]
 n8=$[#RANDOM%10]
 echo "139$n1$n2$n3$n4$n5$n6$n7$n8"  >>$file
done

7.随机抽取五位幸运观众

      在上面的1000个电话号码中随机抽取5个幸运观众,并展示出来 中间4位数字用*代替

#!/bin/bash
#随机抽取五位幸运观众

phone=/root/phonenum.txt
for ((i=1;i<=5;i++))
do
line=`wc -l $phone |cut -d' ' -f1`
luck_link=$[RABDOM%$line+1]
luck_num=`head -$luck_line $phone|tail -1`
echo "139****${luck_num:7:4}"
echo $luck_num >> luck.txt
sed -i "/$luck_num/d" $phone
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值