国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

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

2019-10-26 18:57:58
字體:
來源:轉載
供稿:網(wǎng)友

環(huán)境

操作系統(tǒng):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:$!"

執(zhí)行了一下,OK

結果:

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

假設進程早已手動殺死,在執(zhí)行上面的腳本:

結果提示:

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那一行是沒有一個多余的空格;也就是說,空格是必須的,否則會報語法錯誤。

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

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

簡單講解:

①先執(zhí)行ps -ef|grep -w ggjob-search|grep -v grep|grep -v ggjob-search.sh|awk '{printf $2}',找到我們要殺死的進程ID并賦值給變量pid。

②進行判斷,要是進程沒有被殺死,就執(zhí)行kill -9,進行強制殺死進程操作。

③后臺啟動程序(我這里是啟動jar包),最后打印啟動的新ID。

注意:由于我的腳本名和查詢進程名類似,所以grep取反時,也要把腳本本身臨時啟動的進程ID過濾掉。

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

判斷變量a為空最好的方法是:[ -z string ] [ -n string ]# 這種方式if [ -z $a ];thenecho "${LINENO} a is null"fi# -z 如果string長度為零,則為真# -n 如果string長度非零,則為真            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 乐亭县| 台山市| 龙岩市| 航空| 凌云县| 水富县| 屯门区| 九台市| 黔西| 布拖县| 安阳市| 古浪县| 兰西县| 临高县| 新和县| 石景山区| 平果县| 滨州市| 普定县| 阜平县| 定日县| 铜梁县| 汉沽区| 上蔡县| 江都市| 疏附县| 克东县| 县级市| 育儿| 什邡市| 长阳| 满城县| 平顶山市| 加查县| 秭归县| 东海县| 台州市| 吉隆县| 马公市| 巴彦县| 平远县|