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

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

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

環(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

結果:

ggjob-search...
having kill pid:7018
new 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" ];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:$!"

簡單講解:

①先執(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過濾掉。

這里也貼出網上收集的一些小技巧:

判斷變量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為常規(guī)文件,則為真 [ -f /usr/bin/grep ]

不一一列舉了!

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

相關文章

  • Shell 命令替換的兩種方式

    Shell 命令替換的兩種方式

    這篇文章主要介紹了Shell 命令替換的兩種方式,需要的朋友可以參考下
    2014-04-04
  • Linux下的fdisk指令用法場景分析

    Linux下的fdisk指令用法場景分析

    在Linux系統(tǒng)中,對磁盤進行分區(qū)是管理和利用磁盤空間的重要任務之一,本篇將以通俗易懂的方式,詳細介紹fdisk指令的前世今生、功能、用法和應用場景,幫助讀者全面了解fdisk指令,并掌握其在磁盤管理和問題排查方面的應用,需要的朋友可以參考下
    2024-01-01
  • linux中nohup和后臺運行進程查看及終止

    linux中nohup和后臺運行進程查看及終止

    今天給大家介紹linux中nohup和后臺運行進程查看及終止的操作命令,大家都知道nohup用于不掛斷地運行命令,語法也很簡單,需要的朋友可以參考下本文吧
    2021-06-06
  • 虛擬機中使用linux系啟用文件共享之后的文件存在的位置方法

    虛擬機中使用linux系啟用文件共享之后的文件存在的位置方法

    下面小編就為大家?guī)硪黄摂M機中使用linux系啟用文件共享之后的文件存在的位置方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Linux命令中的rpm安裝命令

    Linux命令中的rpm安裝命令

    RPM 的全稱為Redhat Package Manager ,是由Redhat 公司提出的,用于管理Linux 下軟件包的軟件。下面通過本文給大家分享Linux命令中的rpm安裝命令,需要的的朋友參考下吧
    2017-06-06
  • Shell腳本監(jiān)控目錄內文件改動

    Shell腳本監(jiān)控目錄內文件改動

    這篇文章主要介紹了Shell腳本監(jiān)控目錄內文件改動,需要的朋友可以參考下
    2017-05-05
  • 詳解shell腳本的編寫規(guī)范

    詳解shell腳本的編寫規(guī)范

    這篇文章主要介紹了編寫shell腳本的規(guī)范,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • shell腳本輸出多個主機的網卡速率的方法

    shell腳本輸出多個主機的網卡速率的方法

    這篇文章主要介紹了shell腳本輸出多個主機的網卡速率的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • 基于shell的if和else詳解

    基于shell的if和else詳解

    下面小編就為大家?guī)硪黄趕hell的if和else詳解。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • shell腳本開頭#!/bin/bash的作用詳解

    shell腳本開頭#!/bin/bash的作用詳解

    在Shell腳本中,#!/bin/bash 是指定腳本使用 Bash 解釋器的 shebang 語句,它出現在腳本的第一行,并告訴操作系統(tǒng)使用 Bash 解釋器來執(zhí)行該腳本,這篇文章主要介紹了shell腳本開頭#!/bin/bash的作用詳解,需要的朋友可以參考下
    2023-12-12

最新評論