標籤:重複 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啟動容器中的應用