今天就跟大家聊聊有關(guān)怎么在linux中使用shell腳本對未定義變量進行判斷,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
成都創(chuàng)新互聯(lián)主營錫林浩特網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP軟件開發(fā),錫林浩特h5小程序制作搭建,錫林浩特網(wǎng)站營銷推廣歡迎錫林浩特等地區(qū)企業(yè)咨詢環(huán)境
操作系統(tǒng):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:$!"
執(zhí)行了一下,OK
結(jié)果:
ggjob-search... having kill pid:7018 new pid:7209
假設(shè)進程早已手動殺死,在執(zhí)行上面的腳本:
結(jié)果提示:
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那一行是沒有一個多余的空格;也就是說,空格是必須的,否則會報語法錯誤。
最后我調(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:$!"
簡單講解:
①先執(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 ];then echo "${LINENO} a is null" fi # -z 如果string長度為零,則為真 # -n 如果string長度非零,則為真
經(jīng)過我大量測試:
上面的對未定義變量的判斷也可以這么寫:
# 經(jīng)過我的測試使用-n 不能判斷未定義變量 if [ ! -z ${pid} ];then echo "說明pid變量不為空" else echo "變量pid為空或未定義" fi
這是不是說明:未定義變量,使用-n判斷時,其string長度不為空,使用-z做判斷時,其string長度為空。(我也不確定)
運算符 | 描述 | 示例 |
---|---|---|
-e filename | 如果filename存在,則為真 | [ -e /etc/profile ] |
-d filename | 如果filename為目錄,則為真 | [ -d /tmp/mydir ] |
-f filename | 如果filename為常規(guī)文件,則為真 | [ -f /usr/bin/grep ] |
Linux是一種免費使用和自由傳播的類UNIX操作系統(tǒng),是一個基于POSIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng),使用Linux能運行主要的Unix工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。
看完上述內(nèi)容,你們對怎么在linux中使用shell腳本對未定義變量進行判斷有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。