linux shell脚本对未定义变量的判断以及if的用法详解
环境
操作系统:win10
虚拟机:centos7
需求
因为公司有个脚本,是用于启动程序的,但是每次启动都要手动做如下两个操作:
①先查询之前的进程ID
②杀死之前的,在启动新了
时间长了弄得我很烦躁,所以就琢磨下,把上面的的操作一起整合到启动脚本里去。
最开始我是这么写的:
#!/bin/bash echo"ggjob-search..." pid=`ps-ef|grep-wggjob-search|grep-vgrep|grep-vggjob-search.sh|awk'{printf$2}'` echo"havingkillpid:$pid" kill-9$pid nohupjava-Djava.ext.dirs=lib-Xms500m-Xmx500m-Dlog4j.configuration=file:/home/webuser/gogoal_platform/ggjob/config/log4j.properties-jarggjob-search.jarconfig/config.properties2>&1>>/dev/null& echo"newpid:$!"
执行了一下,OK
结果:
ggjob-search... havingkillpid:7018 newpid:7209
假设进程早已手动杀死,在执行上面的脚本:
结果提示:
kill:usage:kill[-ssigspec|-nsignum|-sigspec]pid|jobspec...orkill-l[sigspec]
虽然不影响后面的命令,依然启动了程序。但是总是报这个也不好看。
所以我打算加上if判断
shellif写法
if空格[空格判断表达式空格];then
else
fi
对未定义变量的判断
举个例子:
if["x${pid}"!="x"];then echo"说明pid变量不为空" else echo"变量pid为空或未定义" fi
特别注意上面if那一行是没有一个多余的空格;也就是说,空格是必须的,否则会报语法错误。
最后我调整后的脚本为:
#!/bin/bash echo"ggjob-search..." pid=`ps-ef|grep-wggjob-search|grep-vgrep|grep-vggjob-search.sh|awk'{printf$2}'` if["X${pid}"!="X"];then echo"havingkillpid:$pid" kill-9$pid fi nohupjava-Djava.ext.dirs=lib-Xms500m-Xmx500m-Dlog4j.configuration=file:/home/webuser/gogoal_platform/ggjob/config/log4j.properties-jarggjob-search.jarconfig/config.properties2>&1>>/dev/null& echo"newpid:$!"
简单讲解:
①先执行ps-ef|grep-wggjob-search|grep-vgrep|grep-vggjob-search.sh|awk'{printf$2}',找到我们要杀死的进程ID并赋值给变量pid。
②进行判断,要是进程没有被杀死,就执行kill-9,进行强制杀死进程操作。
③后台启动程序(我这里是启动jar包),最后打印启动的新ID。
注意:由于我的脚本名和查询进程名类似,所以grep取反时,也要把脚本本身临时启动的进程ID过滤掉。
这里也贴出网上收集的一些小技巧:
判断变量a为空最好的方法是:[-zstring][-nstring] #这种方式 if[-z$a];then echo"${LINENO}aisnull" fi #-z如果string长度为零,则为真 #-n如果string长度非零,则为真
经过我大量测试:
上面的对未定义变量的判断也可以这么写:
#经过我的测试使用-n不能判断未定义变量 if[!-z${pid}];then echo"说明pid变量不为空" else echo"变量pid为空或未定义" fi
这是不是说明:未定义变量,使用-n判断时,其string长度不为空,使用-z做判断时,其string长度为空。(我也不确定)
运算符 | 描述 | 示例 |
---|---|---|
-efilename | 如果filename存在,则为真 | [-e/etc/profile] |
-dfilename | 如果filename为目录,则为真 | [-d/tmp/mydir] |
-ffilename | 如果filename为常规文件,则为真 | [-f/usr/bin/grep] |
不一一列举了!
以上这篇linuxshell脚本对未定义变量的判断以及if的用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。