主頁(yè) > 知識(shí)庫(kù) > linux shell腳本對(duì)未定義變量的判斷以及if的用法詳解

linux shell腳本對(duì)未定義變量的判斷以及if的用法詳解

熱門標(biāo)簽:同花順電話機(jī)器人微信 輝縣市地圖標(biāo)注 房產(chǎn)證地圖標(biāo)注的兩個(gè)面積 湖北孝感如何辦理 威海電銷外呼系統(tǒng)好用嗎 武漢語(yǔ)音電銷機(jī)器人加盟 地圖標(biāo)注x是啥意思 外呼系統(tǒng)的合法性 北京電銷機(jī)器人對(duì)市場(chǎng)的影響

環(huán)境

操作系統(tǒng):win10

虛擬機(jī):centos7

需求

因?yàn)楣居袀€(gè)腳本,是用于啟動(dòng)程序的,但是每次啟動(dòng)都要手動(dòng)做如下兩個(gè)操作:

①先查詢之前的進(jìn)程ID

②殺死之前的,在啟動(dòng)新了

時(shí)間長(zhǎng)了弄得我很煩躁,所以就琢磨下,把上面的的操作一起整合到啟動(dòng)腳本里去。

最開始我是這么寫的:

#!/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:$!"

執(zhí)行了一下,OK

結(jié)果:

ggjob-search...
having kill pid:7018
new pid:7209

假設(shè)進(jìn)程早已手動(dòng)殺死,在執(zhí)行上面的腳本:

結(jié)果提示:

kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]

雖然不影響后面的命令,依然啟動(dòng)了程序。但是總是報(bào)這個(gè)也不好看。

所以我打算加上if判斷

shell if寫法

if空格[空格判斷表達(dá)式空格];then
else
fi

對(duì)未定義變量的判斷

舉個(gè)例子:

if [ "x${pid}" != "x" ];then
echo "說(shuō)明pid變量不為空"
else
echo "變量pid為空或未定義"
fi

特別注意上面if那一行是沒(méi)有一個(gè)多余的空格;也就是說(shuō),空格是必須的,否則會(huì)報(bào)語(yǔ)法錯(cuò)誤。

最后我調(diào)整后的腳本為:

#!/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:$!"

簡(jiǎn)單講解:

①先執(zhí)行ps -ef|grep -w ggjob-search|grep -v grep|grep -v ggjob-search.sh|awk '{printf $2}',找到我們要?dú)⑺赖倪M(jìn)程ID并賦值給變量pid。

②進(jìn)行判斷,要是進(jìn)程沒(méi)有被殺死,就執(zhí)行kill -9,進(jìn)行強(qiáng)制殺死進(jìn)程操作。

③后臺(tái)啟動(dòng)程序(我這里是啟動(dòng)jar包),最后打印啟動(dòng)的新ID。

注意:由于我的腳本名和查詢進(jìn)程名類似,所以grep取反時(shí),也要把腳本本身臨時(shí)啟動(dòng)的進(jìn)程ID過(guò)濾掉。

這里也貼出網(wǎng)上收集的一些小技巧:

判斷變量a為空最好的方法是:[ -z string ] [ -n string ]
# 這種方式
if [ -z $a ];then
echo "${LINENO} a is null"
fi
# -z 如果string長(zhǎng)度為零,則為真
# -n 如果string長(zhǎng)度非零,則為真

經(jīng)過(guò)我大量測(cè)試:

上面的對(duì)未定義變量的判斷也可以這么寫:

# 經(jīng)過(guò)我的測(cè)試使用-n 不能判斷未定義變量
if [ ! -z ${pid} ];then
echo "說(shuō)明pid變量不為空"
else
echo "變量pid為空或未定義"
fi

這是不是說(shuō)明:未定義變量,使用-n判斷時(shí),其string長(zhǎng)度不為空,使用-z做判斷時(shí),其string長(zhǎng)度為空。(我也不確定)

運(yùn)算符 描述 示例
-e filename 如果filename存在,則為真 [ -e /etc/profile ]
-d filename 如果filename為目錄,則為真 [ -d /tmp/mydir ]
-f filename 如果filename為常規(guī)文件,則為真 [ -f /usr/bin/grep ]

不一一列舉了!

以上這篇linux shell腳本對(duì)未定義變量的判斷以及if的用法詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Linux shell條件判斷if中的-a到-z的意思【推薦】
  • Shell中if的基本語(yǔ)法和常見(jiàn)判斷用法
  • Shell腳本IF條件判斷和判斷條件總結(jié)
  • Linux shell腳本編程if語(yǔ)句的使用方法(條件判斷)
  • linux shell中if的各種判斷

標(biāo)簽:武威 西寧 迪慶 日喀則 紹興 麗江 蚌埠 安康

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《linux shell腳本對(duì)未定義變量的判斷以及if的用法詳解》,本文關(guān)鍵詞  linux,shell,腳本,對(duì),未定義,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《linux shell腳本對(duì)未定義變量的判斷以及if的用法詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于linux shell腳本對(duì)未定義變量的判斷以及if的用法詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章