中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在linux中使用shell腳本對未定義變量進行判斷

發布時間:2021-05-12 16:37:23 來源:億速云 閱讀:383 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關怎么在linux中使用shell腳本對未定義變量進行判斷,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

環境

操作系統: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長度為空。(我也不確定)

運算符描述示例
-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腳本對未定義變量進行判斷有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海林市| 乌兰浩特市| 柘荣县| 扶绥县| 易门县| 惠东县| 新丰县| 南通市| 墨脱县| 尤溪县| 教育| 光山县| 平谷区| 崇阳县| 屏东市| 武宁县| 汉中市| 清徐县| 大悟县| 古蔺县| 翼城县| 建湖县| 广丰县| 鹤壁市| 微山县| 磐安县| 黄浦区| 鸡泽县| 屏东县| 韶山市| 汶上县| 和田县| 江陵县| 通州市| 盐边县| 宣化县| 安多县| 和林格尔县| 靖州| 高唐县| 汉阴县|