时间:2021-05-22
环境
操作系统:win10
虚拟机:centos7
需求
因为公司有个脚本,是用于启动程序的,但是每次启动都要手动做如下两个操作:
①先查询之前的进程ID
②杀死之前的,在启动新了
时间长了弄得我很烦躁,所以就琢磨下,把上面的的操作一起整合到启动脚本里去。
最开始我是这么写的:
#!/bin/bashecho "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 $pidnohup 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:7018new pid:7209假设进程早已手动杀死,在执行上面的脚本:
结果提示:
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]虽然不影响后面的命令,依然启动了程序。但是总是报这个也不好看。
所以我打算加上if判断
shell if写法
if空格[空格判断表达式空格];then
else
fi
对未定义变量的判断
举个例子:
if [ "x${pid}" != "x" ];thenecho "说明pid变量不为空"elseecho "变量pid为空或未定义"fi特别注意上面if那一行是没有一个多余的空格;也就是说,空格是必须的,否则会报语法错误。
最后我调整后的脚本为:
#!/bin/bashecho "ggjob-search..."pid=`ps -ef|grep -w ggjob-search|grep -v grep|grep -v ggjob-search.sh|awk '{printf $2}'`if [ "X${pid}" != "X" ];thenecho "having kill pid:$pid"kill -9 $pidfinohup 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 ];thenecho "${LINENO} a is null"fi# -z 如果string长度为零,则为真# -n 如果string长度非零,则为真经过我大量测试:
上面的对未定义变量的判断也可以这么写:
# 经过我的测试使用-n 不能判断未定义变量if [ ! -z ${pid} ];thenecho "说明pid变量不为空"elseecho "变量pid为空或未定义"fi这是不是说明:未定义变量,使用-n判断时,其string长度不为空,使用-z做判断时,其string长度为空。(我也不确定)
运算符 描述 示例 -e filename 如果filename存在,则为真 [ -e /etc/profile ] -d filename 如果filename为目录,则为真 [ -d /tmp/mydir ] -f filename 如果filename为常规文件,则为真 [ -f /usr/bin/grep ]
不一一列举了!
以上这篇linux shell脚本对未定义变量的判断以及if的用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言在编写程序调用变量时,遇到未定义的变量时,会报错,这是就需要我们对变量先进行判断,再进行相关操作。这里主要记录两个变量判断函数的使用:isset()与emp
怎么判断是浏览器还是node环境?node中window是未定义;setImmediate是定义的,在浏览器中未定义timer阶段:这个阶段会执行setTime
看以下案例:test.lua--第一个lua脚本--注释使用“--”符--变量未定义时,默认初始化的值为nil--这样的定义为全局num1=1;--加了关键字l
Cannotsetreactivepropertyonundefined,null,orprimitivevalue://无法对未定义的值、空值或基元值设置反应
当声明一个变量未赋值一个变量没有声明的时候都是undefined类型的数据js变量在使用之前也必须先进行声明使用了一个未定义的变量x就会报错。如何判断一个变量是