我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么在linux中使用shell脚本对未定义变量进行判断

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么在linux中使用shell脚本对未定义变量进行判断

今天就跟大家聊聊有关怎么在linux中使用shell脚本对未定义变量进行判断,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

环境

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

Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统,使用Linux能运行主要的Unix工具软件、应用程序和网络协议。

看完上述内容,你们对怎么在linux中使用shell脚本对未定义变量进行判断有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么在linux中使用shell脚本对未定义变量进行判断

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么在linux中使用shell脚本对未定义变量进行判断

今天就跟大家聊聊有关怎么在linux中使用shell脚本对未定义变量进行判断,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。环境操作系统:win10虚拟机:centos7需求①先查询之
2023-06-09

linux shell脚本对未定义变量的判断以及if的用法详解

环境 操作系统:win10 虚拟机:centos7 需求 因为公司有个脚本,是用于启动程序的,但是每次启动都要手动做如下两个操作: ①先查询之前的进程ID ②杀死之前的,在启动新了 时间长了弄得我很烦躁,所以就琢磨下,把上面的的操作一起整合
2022-06-04

怎么在Linux中使用crontab定时执行Shell脚本

今天就跟大家聊聊有关怎么在Linux中使用crontab定时执行Shell脚本,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、crontab执行配置* * * * * cd /项目
2023-06-09

编程热搜

目录