LinuxShell指令碼在Java啟動容器中的應用

來源:互聯網
上載者:User

標籤:重複   ted   exp   first   string   注意   family   efi   格式   

1、Java或Javaweb工程通過自己寫的shell指令碼啟動容器(tomcat,jetty,netty)
2、基本掌握Linux-Java-Shell指令碼

        a、使用變數
     b、命令列參數
    c、if ... else 語句
    d、case esac語句
    e、for迴圈
    f、Shell函數
    g、Shell函數參數

一、Java工程通過自己寫的shell指令碼啟動

  在看superdiamond的源碼的時候,發現是基於netty寫的服務端,啟動是通過linux的shell指令碼來啟動的。

   啟動netty容器,其實就是一個java的main函數,像最初的httpclient啟動一個server監聽一個連接埠一樣。

   將容器(jetty,tomcat)嵌入到工程內部,然後通過Linux的Shell指令碼來運行工程,這種方式很好,可以簡化程式的部署依賴環境。

   於是決定瞭解一下Linux的Shell指令碼。

二、掌握Linux-Java-Shell指令碼

2.1 使用變數

使用一個定義過的變數,只要在變數名前面加貨幣符號($)即可,如:

1 your_name="mozhiyan"

2 echo $your_name

3 echo ${your_name}

變數名外面的花括弧是可選的,加不加都行,加花括弧是為了協助解譯器識別變數的邊界,比如下面這種情況:for skill in Ada Coffe Action Java

do

    echo "I am good at ${skill}Script"

done

如果不給skill變數加花括弧,寫成echo "I am good at $skillScript",解譯器就會把$skillScript當成一個變數(其值為空白),代碼執行結果就不是我們期望的樣子了。

推薦給所有變數加上花括弧,這是個好的編程習慣。
 

2.2 命令列參數

運行指令碼時傳遞給指令碼的參數稱為命令列參數。命令列參數用 $n 表示,例如,$1 表示第一個參數,$2 表示第二個參數,依次類推。
請看下面的指令碼: #!/bin/bash

echo "File Name: $0"

echo "First Parameter : $1"

echo "First Parameter : $2"

echo "Quoted Values: [email protected]"

echo "Quoted Values: $*"

echo "Total Number of Parameters : $#"

運行結果:
 $./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
2.3 if ... else 語句

if ... else 語句的文法:if [ expression ]then Statement(s) to be executed if expression is truefi如果 expression 返回 true,then 後邊的語句將會被執行;如果返回 false,不會執行任何語句。
最後必須以 fi 來結尾閉合 if,fi 就是 if 倒過來拼字,後面也會遇見。
注意:expression 和方括弧([ ])之間必須有空格,否則會有語法錯誤。
舉個例子:#!/bin/sh

a=10

b=20

if [ $a == $b ]

then

echo "a is equal to b"

fi

if [ $a != $b ]

then

echo "a is not equal to b"

fi

運行結果:a is not equal to b 

2.4 case esac語句

     case ... esac 與其他語言中的 switch ... case 語句類似,是一種多分枝選擇結構。 case 語句匹配一個值或一個模式,如果匹配成功,執行相匹配的命令。case語句格式如下:

   case 值 in
      模式1) 
         command1
         ;;
     模式2) 
         command2
         command3 
         ;;
     *) 
         command4 
         ;; 
   esac


例: 

echo ‘Input a number between 1 to 2‘
echo ‘Your number is:\c‘
read aNum
case $aNum in 
     1) 
      echo ‘You select 1‘ 
      ;; 
     2) 
         echo ‘You select 2‘ 
         ;; 
     *) 
         echo ‘You do not select a number between 1 to 2‘ 
         ;; 
esac 

2.5 for迴圈

for迴圈一般格式為:for 變數 in 列表
do 
     command1 
     command2 ... commandN
done


例:

for loop in 1 2 3 4 5

do

    echo "The value is: $loop"

    done 
2.6 Shell函數 

 函數可以讓我們將一個複雜功能劃分成若干模組,讓程式結構更加清晰,代碼重複利用率更高。像其他程式設計語言一樣,Shell 也支援函數。Shell 函數必須先定義後使用。
Shell 函數的定義格式如下:
 function_name () { 
     list of commands 
     [ return value ]

例:

#!/bin/bash

# Define your function here

Hello () {

   echo "Url is http://see.xidian.edu.cn/cpp/shell/"

}

# Invoke your function  調用函數只需要給出函數名,不需要加括弧。

Hello

2.7 Shell函數參數

在Shell中,調用函數時可以向其傳遞參數。在函數體內部,通過 $n 的形式來擷取參數的值,例如,$1表示第一個參數,$2表示第二個參數...
帶參數的函數樣本:

#!/bin/bash

funWithParam(){

    echo "The value of the first parameter is $1 !"

    echo "The value of the second parameter is $2 !"

    echo "The value of the tenth parameter is $10 !"

    echo "The value of the tenth parameter is ${10} !"       #注意,$10 不能擷取第十個參數,擷取第十個參數需要${10}。

    echo "The value of the eleventh parameter is ${11} !"  #當n>=10時,需要使用${n}來擷取參數。

    echo "The amount of the parameters is $# !"  # 參數個數   

    echo "The string of the parameters is $* !"  # 傳遞給函數的所有參數

}

funWithParam 1 2 3 4 5 6 7 8 9 34 73
linux指令碼學習摘自:http://c.biancheng.net/cpp/view/6994.html

LinuxShell指令碼在Java啟動容器中的應用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.