查看幾個linux指令碼中的基礎知識

來源:互聯網
上載者:User

  查看公司的幾個shell指令碼的運行程式,從中得到了許多基礎知識,現在記錄下來,以供以後學習。

        以下是一個appenv檔案,此檔案裡記錄了運行指令碼裡所需要的一些參數

SERVICE_ID=jlxe.front3//指明程式的標示SERVICE_NAME="運行程式的名稱"SERVICE_CONTEXT=front3_common.xml,app_my.xml//後面一個指令碼中所需用到的參數MainClass=com.umpay.front3.core.Main//主函數

       以下是啟動程式所需要的指令碼run.sh

#!/bin/bashexport LANG=zh_CN.GB18030. appenv. classpathpid=`ps -wwef|grep "Dflag=${SERVICE_ID}"|grep -v grep`if [ -n "${pid}" ]then    echo "${SERVICE_NAME} 已經啟動."else    nohup java -cp ${APPCLASSPATH} -Dflag=${SERVICE_ID} ${MainClass} ${SERVICE_CONTEXT} &    sleep 1. state.shfi. runv.sh

       一一解釋,export命令將自訂變數LANG設為環境變數,以保證其主進程與子進程有相同該值的環境變數。.appenv引入appenv檔案,.classpath為引入clapath檔案,classpath問項目運行所要引進的一些jar包,檔案,以及編譯後的.class檔案,我就不將其貼出了。pid=`ps -wwef|grep "Dflag=${SERVICE_ID}"|grep -v grep`該句話的意思為尋找出該項目的進程,慢慢解釋,其中ps -ww的意思為避免詳細參數被截斷,ps
-e 為顯示所有進程及環境變數,ps -f 為全格式顯示。ps -wwef 的意思就是說以全格式的方式無截斷的顯示所有進程資訊以及環境變數。grep "Dflag=${SERVICE_ID}"為找出進程中含有指定Dflag名字的進程號,最後那一句話為grep -v 為不顯示匹配文本的所有行,grep -v grep意思就是說刪掉grep這一行。if語句中[-n "${pid}"],-n表示指定的變數不為空白。else中為所要執行的java程式的語句。nohup這個命令可以讓你在離線或登出系統後,還能夠讓工作繼續進行。而加上&表示終端機在後台工作,不加則表示在前台工作。而資訊的輸出就被定位到nohup.out中去了。現在對java
-cp來進行解釋,第一個欄位為所需要的jar包路徑,class檔案,以及其他一下運行需要的檔案,-Dflag,一定要是-D(變數名)這種格式,代表設定了一個系統屬性,可以通過System.getProperties()來擷取到。sleep 1代表睡眠一秒鐘然後執行.state.sh指令碼,最後再執行.runv.sh。

      以下是runv.sh,就是在run.sh在執行最後執行的shell指令碼      

#!/bin/bashclearsleep 1tail -50f nohup.out

其中clear為清空螢幕,sleep 1為休眠一秒鐘,tail -50f nohup.out 動態監測nohup.out檔案的後50行內容。

     以下是state.sh,用來判斷該進程是否啟動並執行標誌

#!/bin/bash. appenvpid=`ps -wwef|grep "Dflag=${SERVICE_ID}"|grep -v grep`if [ -n "${pid}" ]then    echo "${SERVICE_NAME} 已經啟動."else    echo "${SERVICE_NAME} 未啟動."fi

      所有代碼已在上面解釋過,不再重複。

     以下是stop.sh,用來停止該進程。

#!/bin/bash. appenvsleep 1pid=`ps -wwef|grep "Dflag=${SERVICE_ID}"|grep -v grep`if [ -n "${pid}" ]then    ps -wwef|grep Dflag=${SERVICE_ID}|grep -v grep|grep -v tail|awk 'BEGIN{printf "kill "}{printf "%s ", $2}'|bashecho "${SERVICE_NAME} 服務已停止!"else    echo "${SERVICE_NAME} 未啟動."fi

需要解釋的只有一個awk,命令,awk預設的文法格式為 awk ' Pattern {Action}',只有當pattern判斷為true時執行action,所謂的pattern為一個關聯運算式,如3>2,1==3,等等吧,也可以為一個Regex的判斷~表示match 某一個Regex,!~表示不匹配某一個Regex,(例如:"banana" ~ /an/)只要結果為true則執行後面的action。若pattern預設,則表示直接執行action。而後面action的文法,和C語言是很類似的。所以在此程式中awk
執行的語句即為,kill 進程號,所以在stop.sh中,即找到與某Dflag匹配的程式,並將其進程號殺掉。

       以下為restart.sh的shell指令碼,意思是對此程式進行重新啟動。代碼不再解釋,已在上面重複出現過。

#!/bin/bash. appenvsleep 1pid=`ps -wwef|grep "Dflag=${SERVICE_ID}"|grep -v grep`if [ -n "${pid}" ]then    ps -wwef|grep Dflag=${SERVICE_ID}|grep -v grep|grep -v tail|awk 'BEGIN{printf "kill "}{printf "%s ", $2}'|bashecho "${SERVICE_NAME} 服務已停止!"else    echo "${SERVICE_NAME} 未啟動."fi. run.sh

而在管道命令後加一個bash,經測試,本人理解為,awk執行後的結果為列印命令,加上bash後即為按照bash命令來執行這個列印語句。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.