一.守护脚本
用于守护一个进程,如果该进程因意外情况停止运行,则守护脚本会自动启动该进程,以保证该进程一直处于运行状态中。
下面是用shell实现的一个守护脚本:
#! /bin/sh
#进程名字可修改
PRO_NAME=zhb-t
#程序启动脚本命令
START_SH="./start.sh"
#用ps获取$PRO_NAME进程数量
NUM=`ps aux | grep ${PRO_NAME} | grep -v grep |wc -l`
#echo $NUM
#少于1,重启进程
if [ "${NUM}" -lt "1" ];then
echo "${PRO_NAME} has been killed"
${START_SH}
echo "${PRO_NAME} started"
fi
exit 0
该脚本然后用crontab定时执行,监控进程是否停止
二. 杀死进程
kill某个进程名下所有进程
#! /bin/sh
#进程名字可修改
PRO_NAME=example_echocli
pidnum=`ps -ef|grep ${PRO_NAME} |grep -v grep|wc -l`
if [ $pidnum -lt 1 ]
then
echo "no program killed."
else
for pid in `ps -ef|grep ${PRO_NAME} |grep -v grep|awk '{print $2}'`
do
kill -9 $pid
done
echo "program stoped."
fi
exit 0
或者更简单的是:
ps -ef | grep "procedure" | grep -v grep | awk '{print $2}' | xargs kill -9
三. admin工具
#!/bin/sh
RED=\\e[1m\\e[31m
DARKRED=\\e[31m
GREEN=\\e[1m\\e[32m
DARKGREEN=\\e[32m
BLUE=\\e[1m\\e[34m
DARKBLUE=\\e[34m
YELLOW=\\e[1m\\e[33m
DARKYELLOW=\\e[33m
MAGENTA=\\e[1m\\e[35m
DARKMAGENTA=\\e[35m
CYAN=\\e[1m\\e[36m
DARKCYAN=\\e[36m
RESET=\\e[m
if [ $# != 1 ]
then
echo -e "$RED USAGE: $0 $YELLOW option [start | stop | restart]$RESET"
exit 0;
fi
dir=`echo $0|sed 's/admin.sh//g'`
cd $dir
if [ $1 = "start" ]
then
./start.sh
elif [ $1 = "stop" ]
then
./stop.sh
elif [ $1 = "restart" ]
then
./stop.sh
./start.sh
else
echo -e "$RED USAGE: $0 $YELLOW option [start | stop | restart]$RESET"
exit 0;
fi
四.遍历文件夹,并判断文件后缀名
#!/bin/sh
PHPPATH="/root/zhb/PHP/pchart.1.27d/"
PHPBIN="/usr/local/PHP/bin/PHP -f"
filelist=`ls $PHPPATH`
for file in $filelist
do
if [ "${file##*.}" = "PHP" ]
then
$PHPBIN $PHPPATH/$file
fi
done
五. shell操作redis和MysqL
//删除redis的某个key
echo "del verify_0" | /export/servers/redis/redis-cli -h 192.22.144.34 -p 6379
//删除MysqL的某张表数据
MysqL -uroot -h192.168.144.121 -pMysqL -e "truncate table test.myzhb"
六. 在shell脚本中执行带参数的sh文件
/bin/bash -c ./mybatch.sh param1 param2
注意加-c
或者用七的方法,echo “
七. 批量转化IP
把一个十进制数转化为点分制ip的脚本
#!/bin/bash
N=$1
H1=$(($N & 0x000000ff))
H2=$((($N & 0x0000ff00) >> 8))
L1=$((($N & 0x00ff0000) >> 16))
L2=$((($N & 0xff000000) >> 24))
echo $H1.$H2.$L1.$L2
将上面的脚本保存为num2ip.sh
按行读取文本,批量转换(注意要要将每一行的最后一个换行符去掉):
#!/bin/bash
for line in `cat ./ip`
do
echo `./num2ip.sh ${line%?}` #去掉最后一个字符\n
done