現(xiàn)學(xué)現(xiàn)用之Shell簡單筆記

shell腳本學(xué)習(xí)之springboot jar包簡單部署

參考地址

前言

很早就接觸了linux系統(tǒng)榜轿,然后也習(xí)慣了使用命令行悼沈。我也知道shell很強(qiáng)大泼返,這次就這springboot jar包簡單部署最仑,漲漲姿勢梦重。

簡單知識點(diǎn)

  • 寫完的腳本文件仑乌,記得添加執(zhí)行權(quán)限: chmod +x xxxx.sh

  • 執(zhí)行腳本命令: sh xxx.sh

  • 要加很多空格百拓,變量和符號之前,如下晰甚,如果在 中括號‘0’ 和 ‘]’ 之間沒有空格衙传,那么該語句報(bào)錯(cuò),無法識別 0 這個(gè)參數(shù)

    if [ $# -eq 0 ];
    then
        usage
    fi
    
  • 變量賦值時(shí)候 等號("=") 左右兩邊都不要留空格厕九,否則腳本報(bào)錯(cuò)

  • 查看指定端口(80)運(yùn)行程序的進(jìn)程pid命令: netstat -nlp|grep :80|awk '{print $7}'|sed 's/\([0-9]*\).*/\1/g'

  • 注意sed 蓖捶、awk、grep 三個(gè)命令的區(qū)別和用法

  • if 語句中的一些參數(shù):

    [-z string] “string”的長度為零則為真

    [-n string] or [string] “string”的長度為非零non-zero則為真

    其他的參數(shù)扁远,

  • read:命令行從輸入設(shè)備讀入內(nèi)容

  • 推薦給使用的變量都添加花括號,這是個(gè)好習(xí)慣俊鱼,比如 echo "I am good at ${skill}"

  • 一些特殊變量

    變量 含義
    $0 當(dāng)前腳本的文件名
    $n 傳遞給腳本或函數(shù)的參數(shù)。n 是一個(gè)數(shù)字穿香,表示第幾個(gè)參數(shù)亭引。例如,第一個(gè)參數(shù)是$1皮获,第二個(gè)參數(shù)是$2焙蚓。
    $# 傳遞給腳本或函數(shù)的參數(shù)個(gè)數(shù)。
    $* 傳遞給腳本或函數(shù)的所有參數(shù)。
    $@ 傳遞給腳本或函數(shù)的所有參數(shù)购公。被雙引號(" ")包含時(shí)萌京,與 $* 稍有不同
    $? 上個(gè)命令的退出狀態(tài),或函數(shù)的返回值宏浩。
    $$ 當(dāng)前Shell進(jìn)程ID知残。對于 Shell 腳本,就是這些腳本所在的進(jìn)程ID比庄。
  • shell默認(rèn)是不處理轉(zhuǎn)義的字符的求妹。需要加-e選項(xiàng)。比如 echo -e "hello \n world"(是在腳本中佳窑,不是在命令行中直接輸入)
  • shell本身不支持算數(shù)運(yùn)算制恍,所以使用expr命令進(jìn)行自增
#!/bin/bash
c=0;
while [ $c -lt 3 ]
do
    echo "Value c is $c"
    # 執(zhí)行命令,需要用 `` 包起來神凑。在 esc 鍵位邊山
    c=`expr $c + 1`
done
  • Shell 函數(shù)必須先定義后使用

  • 直接從終端調(diào)用函數(shù)净神,可以將函數(shù)定義在主目錄下的 .profile 文件,這樣每次登錄后溉委,在命令提示符后面輸入函數(shù)名字就可以立即調(diào)用

  • 不希望文件內(nèi)容被覆蓋鹃唯,可以使用 >> 追加到文件末尾 eg:echo line 2 >> users

  • awk 中,~ 表示使用正則匹配瓣喊, !~ 表示不匹配正則表達(dá)式坡慌;eg: awk '$2~/(1990|1991)/{print $1}' s.txt

linux 命令行文本工具

飛鴻影的博客

sed 命令

  • 行內(nèi)部分內(nèi)容替換,這個(gè)用的最多了

    sed 's/要被取代的字串/新的字串/g'
    

替換規(guī)則范例

s/\t/","/g;      \t換成","
s/^/"/;      開頭加上"
s/$/"/;s/\n//g     末尾加上"
s/"http://g;      引號去掉 
s/,/ /g      逗號換成空格
s/,/\n/g     逗號換成空行
s/[NULL]//g;      NULL換成空白
s/[,型宝,]/\n/g     中英文逗號換成空行

掌握之后八匠,事半功倍

?

xargs 命令

由于很多命令不支持|管道來傳遞參數(shù),而日常工作中有有這個(gè)必要趴酣,所以就有了xargs命令梨树,例如:

find /sbin -perm +700 | ls -l       #這個(gè)命令是錯(cuò)誤的
find /sbin -perm +700 | xargs ls -l   #這樣才是正確的
cat picurl.csv | grep -E -o "http://www.test.com(.*?).jpg" |  xargs wget -c

最后

學(xué)習(xí)過程中,參雜了其他知識岖寞,順手就記下來了抡四。
貼上最終腳本,很大部分參考他的博客

#!/bin/bash

usage() {
        echo "食用方式:sh yourshellname.sh [jar包名] [start|stop|restart] [env]"
        echo "jar包代號"
        echo '1:dwcm-api  2:dwcm-web  3:dwcm-wx  4:dwcm-openApi  5:dwcm-coupon  6:dwcm-dispatcher'
        echo "7:wes-api  8:wes-dispatcher  9:wes-manager  wes-wx"
        exit 1
}

## 判斷參數(shù)個(gè)是為 0 個(gè),$# 表示用戶輸入的參數(shù)個(gè)數(shù)
if [ $# -eq 0 ]; then
        usage
fi

###  獲取所有的參數(shù)
PROJECT_NAME=""
EXCUTE_TYPE=""
PROJECT_ENV=""
CODE=0

echo "開始參數(shù)處理"

while getopts "n:a:m:" opt; do
        case $opt in
        n)
                CODE=$OPTARG
                ;;
        a)
                EXCUTE_TYPE=$OPTARG
                ;;
        m)
                PROJECT_ENV=$OPTARG
                ;;
        *)
                echo "不支持參數(shù)和選項(xiàng)"
                ;;

        esac
done

########### 包名處理

if [ $CODE == 1 ]; then
        PROJECT_NAME='dwcm-api.jar'
elif [ $CODE == 2 ]; then
        PROJECT_NAME="dwcm-web.jar"
elif [ $CODE == 3 ]; then
        PROJECT_NAME="dwcm-wx.jar"
elif [ $CODE == 4 ]; then
        PROJECT_NAME="dwcm-openApi.jar"
elif [ $CODE == 5 ]; then
        PROJECT_NAME="dwcm-coupon.jar"
elif [ $CODE == 6 ]; then
        PROJECT_NAME="dwcm-dispatcher.jar"
elif [ $CODE == 7 ]; then
        PROJECT_NAME="wes-api.jar"
elif [ $CODE == 8 ]; then
        PROJECT_NAME="wes-dispatcher.jar"
elif [ $CODE == 9 ]; then
        PROJECT_NAME="wes-manager.jar"
elif [ $CODE == 10 ]; then
        PROJECT_NAME="wes-wx.jar"
else
        echo "請選擇對應(yīng)的程序執(zhí)行"
        exit 1

fi

##### 執(zhí)行的操作類型

if [ ! $EXCUTE_TYPE ]; then
        echo "執(zhí)行類型 [start|stop|restart] IS NULL"
        exit 1
fi

if [ "$RPOJECT_ENV" = "" ]; then
        echo "沒有指定運(yùn)行的profile仗谆,將使用打包時(shí)默認(rèn)的profile"
fi

echo "----------------------------------------------------"
echo "使用的參數(shù)"
echo "應(yīng)用jar包名:$PROJECT_NAME"
echo "腳本行為:$EXCUTE_TYPE"
echo "環(huán)境:$PROJECT_ENV"
echo "-------------------參數(shù)處理完成-------------------- "

###  以上參數(shù)接受區(qū)域 #######

echo "開始檢測進(jìn)程"

##### #查詢$PROCESS_PID進(jìn)程個(gè)數(shù):wc -l 返回行數(shù)
CURRENT_PROCESS_COUNT=$(ps -ef | grep $PROJECT_NAME | grep $PROJECT_NAME | grep -v "grep" | wc -l)
echo "當(dāng)前運(yùn)行 $PROJECT_NAME 的進(jìn)程個(gè)數(shù)為 $CURRENT_PROCESS_COUNT"

CURRENT_PROCESS_PID=$(ps -ef | grep $PROJECT_NAME | grep $PROJECT_NAME | grep -v "grep" | awk '{print $2}')
echo "當(dāng)前運(yùn)行 $PROJECT_NAME 的進(jìn)程ID-->"$CURRENT_PROCESS_PID

####  啟動方法
start() {
        echo '-----------------------開始啟動服務(wù)----------------------'
        if [ -n "$CURRENT_PROCESS_PID" ]; then
                echo "服務(wù)名稱: $PROJECT_NAME,進(jìn)程號為:$CURRENT_PROCESS_PID 服務(wù)正在運(yùn)行"
                echo "本次執(zhí)行啟動失敗"
                exit 1
        fi

        echo -n "開始啟動 $PROJECT_NAME"
        nohup java -jar $PROJECT_NAME --spring.profiles.active=$PROJECT_ENV >/dev/null 2>&1 &

        for st in $(seq 1 20); do
                # 根據(jù)app名稱指巡,獲取 pid
                PID=$(ps -ef | grep $PROJECT_NAME | grep $PROJECT_NAME | grep -v "grep" | awk '{print $2}')
                # 計(jì)數(shù)到20,并且依然沒有獲取到app 的進(jìn)程隶垮,那此次啟動判定為失敗
                if [ $st -eq 20 ] && [ -z "$PID"]; then
                        echo "服務(wù)啟動失敗"
                        break
                fi

                if [ -z "$PID"]; then
                        sleep 3
                        echo $st"服務(wù)啟動中....."
                else
                        echo "服務(wù)啟動完成礼华,進(jìn)程ID為 $PID,耗時(shí): $(($((st - 1)) * 3)) 秒"
                        break
                fi
        done

}

stop() {
        echo "開始執(zhí)行停止服務(wù)命令"
        if [ -z "$CURRENT_PROCESS_PID" ]; then
                echo "沒有找到該服務(wù)的進(jìn)程廊敌,請確認(rèn)該服務(wù)是否啟動"
        else
                kill -9 $CURRENT_PROCESS_PID
                echo "服務(wù)器已停止"
        fi
}

status() {
        if [ -z "$CURRENT_PROCESS_PID" ]; then
                echo "沒有找到該服務(wù)的進(jìn)程"
        else
                echo "運(yùn)行服務(wù)名稱:$PROJECT_NAME"
                echo "運(yùn)行的進(jìn)程id; $CURRENT_PROCESS_PID"
        fi

}

restart() {
        stop
        start
}

case "$EXCUTE_TYPE" in
"start")
echo "------------------start--------------------"
        start
        ;;
"stop")
echo "------------------stop--------------------"
        stop
        ;;
"restart")
        restart
        ;;
"status")
echo "------------------status--------------------"
        status
        ;;
*)
        usage
        ;;
esac
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市疹蛉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件至壤,死亡現(xiàn)場離奇詭異,居然都是意外死亡枢纠,警方通過查閱死者的電腦和手機(jī)像街,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晋渺,“玉大人镰绎,你說我怎么就攤上這事⌒┚伲” “怎么了跟狱?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長户魏。 經(jīng)常有香客問我,道長挪挤,這世上最難降的妖魔是什么叼丑? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮扛门,結(jié)果婚禮上鸠信,老公的妹妹穿的比我還像新娘。我一直安慰自己论寨,他們只是感情好星立,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著葬凳,像睡著了一般绰垂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上火焰,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天劲装,我揣著相機(jī)與錄音,去河邊找鬼昌简。 笑死占业,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的纯赎。 我是一名探鬼主播谦疾,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼犬金!你這毒婦竟也來了念恍?” 一聲冷哼從身側(cè)響起六剥,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎樊诺,沒想到半個(gè)月后仗考,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡词爬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年秃嗜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片顿膨。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锅锨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出恋沃,到底是詐尸還是另有隱情必搞,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布囊咏,位于F島的核電站恕洲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏梅割。R本人自食惡果不足惜霜第,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望户辞。 院中可真熱鬧泌类,春花似錦、人聲如沸底燎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽双仍。三九已至枢希,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間殊校,已是汗流浹背晴玖。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留为流,地道東北人呕屎。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像敬察,于是被迫代替她去往敵國和親秀睛。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344