在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
环境 操作系统:win10 虚拟机:centos7 需求 因为公司有个脚本,是用于启动程序的,但是每次启动都要手动做如下两个操作: ①先查询之前的进程ID ②杀死之前的,在启动新了 时间长了弄得我很烦躁,所以就琢磨下,把上面的的操作一起整合到启动脚本里去。 最开始我是这么写的: #!/bin/bash echo "ggjob-search..." pid=`ps -ef|grep -w ggjob-search|grep -v grep|grep -v ggjob-search.sh|awk '{printf $2}'` echo "having kill pid:$pid" kill -9 $pid nohup java -Djava.ext.dirs=lib -Xms500m -Xmx500m -Dlog4j.configuration=file:/home/webuser/gogoal_platform/ggjob/config/log4j.properties -jar ggjob-search.jar config/config.properties 2>&1 >>/dev/null & echo "new pid:$!" 执行了一下,OK 结果: ggjob-search... having kill pid:7018 new pid:7209 假设进程早已手动杀死,在执行上面的脚本: 结果提示: kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec] 虽然不影响后面的命令,依然启动了程序。但是总是报这个也不好看。 所以我打算加上if判断 shell if写法 if空格[空格判断表达式空格];then 对未定义变量的判断 举个例子: if [ "x${pid}" != "x" ];then echo "说明pid变量不为空" else echo "变量pid为空或未定义" fi 特别注意上面if那一行是没有一个多余的空格;也就是说,空格是必须的,否则会报语法错误。 最后我调整后的脚本为: #!/bin/bash echo "ggjob-search..." pid=`ps -ef|grep -w ggjob-search|grep -v grep|grep -v ggjob-search.sh|awk '{printf $2}'` if [ "X${pid}" != "X" ];then echo "having kill pid:$pid" kill -9 $pid fi nohup java -Djava.ext.dirs=lib -Xms500m -Xmx500m -Dlog4j.configuration=file:/home/webuser/gogoal_platform/ggjob/config/log4j.properties -jar ggjob-search.jar config/config.properties 2>&1 >>/dev/null & echo "new pid:$!" 简单讲解: ①先执行ps -ef|grep -w ggjob-search|grep -v grep|grep -v ggjob-search.sh|awk '{printf $2}',找到我们要杀死的进程ID并赋值给变量pid。 ②进行判断,要是进程没有被杀死,就执行kill -9,进行强制杀死进程操作。 ③后台启动程序(我这里是启动jar包),最后打印启动的新ID。 注意:由于我的脚本名和查询进程名类似,所以grep取反时,也要把脚本本身临时启动的进程ID过滤掉。 这里也贴出网上收集的一些小技巧: 判断变量a为空最好的方法是:[ -z string ] [ -n string ] # 这种方式 if [ -z $a ];then echo "${LINENO} a is null" fi # -z 如果string长度为零,则为真 # -n 如果string长度非零,则为真 经过我大量测试: 上面的对未定义变量的判断也可以这么写: # 经过我的测试使用-n 不能判断未定义变量 if [ ! -z ${pid} ];then echo "说明pid变量不为空" else echo "变量pid为空或未定义" fi 这是不是说明:未定义变量,使用-n判断时,其string长度不为空,使用-z做判断时,其string长度为空。(我也不确定)
不一一列举了! 以上这篇linux shell脚本对未定义变量的判断以及if的用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持极客世界。 |
请发表评论