学习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