欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2018年07月14日 11:00:45   投稿:jingxian  
今天小編就為大家分享一篇linux shell腳本對未定義變量的判斷以及if的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

環(huán)境

操作系統(tǒng):win10

虛擬機(jī):centos7

需求

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

①先查詢之前的進(jìn)程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è)進(jìn)程早已手動殺死,在執(zhí)行上面的腳本:

結(jié)果提示:

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

雖然不影響后面的命令,依然啟動了程序。但是總是報這個也不好看。

所以我打算加上if判斷

shell if寫法

if空格[空格判斷表達(dá)式空格];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}',找到我們要?dú)⑺赖倪M(jìn)程ID并賦值給變量pid。

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

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

注意:由于我的腳本名和查詢進(jìn)程名類似,所以grep取反時,也要把腳本本身臨時啟動的進(jìn)程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長度為空。(我也不確定)

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

不一一列舉了!

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

相關(guān)文章

  • 淺析Linux系統(tǒng)下安裝wetty和使用說明

    淺析Linux系統(tǒng)下安裝wetty和使用說明

    本篇文章主要給大家介紹linux系統(tǒng)下安裝wetty和使用說明,以及l(fā)inux tty命令學(xué)習(xí)總結(jié),感興趣的朋友跟著小編一起學(xué)習(xí)吧
    2015-10-10
  • linux命令學(xué)習(xí)之10個網(wǎng)絡(luò)命令和監(jiān)控命令

    linux命令學(xué)習(xí)之10個網(wǎng)絡(luò)命令和監(jiān)控命令

    下面列出來的10個基礎(chǔ)的每個linux用戶都應(yīng)該知道的網(wǎng)絡(luò)和監(jiān)控命令,大家參考使用吧
    2014-01-01
  • bash shell中的if-then語句

    bash shell中的if-then語句

    bash shell的 if 語句會運(yùn)行 if 后面的那個命令,如果該命令的退出狀態(tài)碼是0,位于 then 部分的命令就會被執(zhí)行,這篇文章主要介紹了bash shell中的if-then語句,需要的朋友可以參考下
    2023-12-12
  • 每天一個linux命令 whereis命令

    每天一個linux命令 whereis命令

    這篇文章主要為大家詳細(xì)介紹了一個linux命令:whereis命令,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Shell腳本四則運(yùn)算符號實(shí)用的技巧和注意事項(xiàng)

    Shell腳本四則運(yùn)算符號實(shí)用的技巧和注意事項(xiàng)

    這篇文章主要介紹了Shell腳本四則運(yùn)算符號實(shí)用的技巧和注意事項(xiàng),文中通過示例代碼介紹了基本的算術(shù)運(yùn)算符號(加、減、乘、除)、浮點(diǎn)數(shù)運(yùn)算(使用bc命令),以及自增、自減和復(fù)合賦值運(yùn)算符的使用技巧,需要的朋友可以參考下
    2025-04-04
  • Linux服務(wù)器安全清理垃圾文件的命令詳解

    Linux服務(wù)器安全清理垃圾文件的命令詳解

    在這現(xiàn)代的歲月,數(shù)碼世界日益發(fā)展,凡是涉及計(jì)算,必然離不開那浩如煙海的數(shù)據(jù),龐大如巨鯨的文件,若將目光轉(zhuǎn)向我們的服務(wù)器,尤其是 Linux 服務(wù)器,垃圾文件的積累便如那墻角的蛛網(wǎng),本文就給大家聊聊如何在 Linux 服務(wù)器上安全地清理垃圾文件,需要的朋友可以參考下
    2024-06-06
  • Shell編程筆記之正則表達(dá)式與文本處理器詳解

    Shell編程筆記之正則表達(dá)式與文本處理器詳解

    這篇文章主要介紹了Shell編程筆記之正則表達(dá)式與文本處理器的相關(guān)資料,正則表達(dá)式用于精準(zhǔn)匹配字符串,而文本處理器如grep、sed、awk則用于高效處理文本,通過學(xué)習(xí)正則表達(dá)式的基礎(chǔ)和擴(kuò)展表達(dá)式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • Linux下date命令,格式化輸出,時間設(shè)置方法

    Linux下date命令,格式化輸出,時間設(shè)置方法

    下面小編就為大家?guī)硪黄狶inux下date命令,格式化輸出,時間設(shè)置方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 在Linux中將cURL的輸出保存到文件的幾種方法

    在Linux中將cURL的輸出保存到文件的幾種方法

    當(dāng)你需要將cURL的輸出保存到文件時,Linux提供了幾種不同的方法,cURL是一個功能強(qiáng)大的命令行工具,用于在網(wǎng)絡(luò)上傳輸數(shù)據(jù),通常用于HTTP請求,在本文中,我們將探討如何使用cURL將其輸出保存到文件,以及一些附加的選項(xiàng)和技巧
    2023-09-09
  • linux修改文件名的三種方法

    linux修改文件名的三種方法

    我們在使用linux系統(tǒng)過程中為了便于記憶或整理維護(hù),經(jīng)常需要對文件名進(jìn)行修改,下面文章介紹了linux系統(tǒng)的三種修改文件名稱的方式,需要的朋友可以參考下
    2023-09-09

最新評論