扣丁学堂Linux培训详解Linux shell脚本对未定义变量的判断以及if的用法

2019-04-02 15:16:21 1474浏览

本篇文章扣丁学堂Linux培训小编给读者们分享一下Linux shell脚本对未定义变量的判断以及if的用法,对Linux开发感兴趣或者是想要参加Linux培训加入Linux开发领域中的小伙伴就随小编一起来了解一下吧。



扣丁学堂Linux培训详解Linux shell脚本对未定义变量的判断以及if的用法



境:    


操作系统: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

else

fi


未定义变量的判断


举个例子:


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学习


最后想要了解更多关于Linux开发方面内容的小伙伴,请关注扣丁学堂Linux培训官网、微信等平台,扣丁学堂IT职业在线学习教育平台为您提供权威的Linux开发环境搭建视频,Linux培训后的前景无限,行业薪资和未来的发展会越来越好的,扣丁学堂老师精心推出的Linux视频教程定能让你快速掌握Linux从入门到精通开发实战技能。扣丁学堂Linux技术交流群:422345477。


扣丁学堂微信公众号                          Python全栈开发爬虫人工智能机器学习数据分析免费公开课直播间


【关注微信公众号获取更多学习资料】         【扫码进入Python全栈开发免费公开课】




查看更多关于“Linux培训资讯”的相关文章>>



标签: linux系统入门学习 linux培训 linux视频教程 linux基础教程 linux在线视频 linux在线学习 linux从入门到精通 linux开发环境包 linux系统 linux开发教程

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号