我以前练习的时候写的,挺烂的但是能用
#!/bin/bash
#ping 2分钟结果存入文件
#var 1.0
#LX 2009年4月6日
#help function
help()
{
cat <<HELP
============= ping120s.sh help =============
ping目标地址,存入文件。 配合crontab用
USAGE:
-h 显示帮助
-to IP ping的IP地址
-sh 检查历史是否有丢包
-show 检查详细历哗码史
-gz 压缩以前的记录,并删除txt文件
-of dir 指定输出文件的位置(要求绝对目录),也可以指定文件名乱衡哪(不建议)
HELP
}
#简略输出结果的函数
shmin()
{
for fName in PING__*.txt
do
var=$(sed -n '/.*packets.*/p' $fName | sed 's/.*received,//g' | sed 's/, time.*//g')
var="$(sed -n '/2009_.*/p' $fName) ==>$var"
echo "$var"
var=""
done
}
toGz()
{
gzName=ALL_$(date +%Y年%m月%d日%k时).tar.gz
gzName=`echo "$gzName" | sed 's/ /0/g'`
tar cvfz "$gzName" *.txt
[ ! -d old ] &&mkdir old
[ ! -d tmp ] &&mkdir tmp
mv $gzName old/ &&mv *.txt tmp/
}
############## main ###############
[ -z $1 ] &&{ echo "参数错误"helpexit 1}
#fileName=ping__$1__$(date +%m月%d日%k:%M)
#删除文件名中的空格, 不删除的话0点到10点之前都没法记录 日亚终于找到毛病了
#fileName=`echo "$fileName" | sed 's/ /0/g'`
#echo $fileName
TIMEOUT=30
while [ -n "$1" ]do
case "x$1" in
x-h) helpexit 0
x-to)
shift
[ -z "$1" ] &&{ echo "参数错误"helpexit 1}
pingTo="$1"
shift
x-sh) shminexit 0
x-show) cleartail -n 3 PING__*.txtexit 0
x-gz) toGzexit 0
x-of)
shift
[ -z "$1" ] &&{ echo "参数错误"helpexit 1}
ofilename="$1"
shift
*) echo "error"helpexit 1
esac
done
#-to是必须参数,ping到那里
[ -z "$pingTo" ] &&{ echo "-to 参数必选之参数"helpexit 1}
#判断存数文件的中间名
if [ -z "$ofilename" ] || [ -d "$ofilename" ]then
mfileName=$pingTo
else
mfileName=${ofilename##/*/}
fi
#生成存储文件的名称,如没有sed那句过了夜里12点0点开头到9点都无法存储,应为有个空格 日!
fileName=PING__"$mfileName"__$(date +%m月%d日%k:%M)
fileName=`echo "$fileName" | sed 's/ /0/g'`
#存储的目录判断,默认是$PWD,主要是判断绝对目录开拦哗头的/和结束的/
dirName="$PWD/"
if [ "x${ofilename%${ofilename#?}}" = "x/" ]then
if [ -d "$ofilename" ]then
dirName="$ofilename"
[ "x${ofilename#${ofilename%?}}" = "x/" ] || dirName="$dirName/"
elif [ -d "${ofilename%/*}" ]then
dirName="${ofilename%/*}/"
fi
fi
#echo $fileName
#echo $dirName
echo "$(date +%Y_%m_%d__%H:%M)" >"$dirName$fileName.txt"
ping "$pingTo" -n -w "$TIMEOUT" >>"$dirName$fileName.txt"
wait
bash sms.sh "$pingTo" 2>>sms.log
exit 0
下面是发短信脚本 sms.sh
lx@lx-Linux:~/bash/lx/ping$ cat sms.sh
#!/bin/bash
data=$(sh ping120s_V1.sh -sh| awk -F"[% ]" '{print $3}'|tac)
data=$(echo $data | awk '{print $1,$2}')
shijian=$(date +%Y年%m月%d日%k时%M分|sed 's/ *//g')
if [ -z $1 ]
then
address=""
else
address="$1"
fi
#echo $data
#echo $shijian
#data="40 $data"
for i in $(echo $data)
do
# echo "-->$i"
if [ $i -ge 40 ]
then
# echo "$i>=40"
sms -f 手机号码 -p 飞信密码 -t 发送给那个手机 -m "To:$address $i% loss -- $shijian" >>sms.log
wait
echo "To:$address $i% loss -- $shijian" >>sms.log
# bash ping120s_V1.sh -gz
exit 9
else
# echo "$i<40"
:
fi
done
exit 0
本周我们学习了如何使用Linux编辑脚本程序,当我们编写好脚本的时候,我们需要返回终端界面,使用各种编译器运行程序,但是有时候我们需要在系统开机的时候就自动运行这些程序,下面我们就来看一下在Linux下将脚本设定成开机自动运行的方法。
Linux在散肆启动时,会自动执行/etc/rc.d目录下的初始化程序,因此我们可以把启动任务放到该目录下。假冲没轿设我们需要运行的脚本文件是test1目录下的test.py。
在系统中找到/etc/rc.local文件,系统会根据该文件来启动所指定的脚本或命令。
我们需要用超级用户登录,并在上述文件最后添加需要运行的脚本文件。
随后cd /home/test1返回test1目录以对其进行更改。
su test1 -c "python /home/test1/test.py" --把要察洞执行的命令作为一个参数传递级su
下面我们就可以实现这个脚本的开机自动运行。
crontab -e添加一个定时任务就可以了格式如下:
f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示脊如扰一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行樱旦的程式。
比如:
每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"
20 0-23/2 * * * echo "橡拆haha"
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)