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