首页 > 代码库 > LinuxShell脚本在Java启动容器中的应用

LinuxShell脚本在Java启动容器中的应用

1Java或Javaweb工程通过自己写的shell脚本启动容器(tomcat,jetty,netty)
2、基本掌握Linux-Java-Shell脚本

        a使用变量
     b命令行参数
    cif ... else 语句
    dcase esac语句
    efor循环
    fShell函数
    gShell函数参数

一、Java工程通过自己写的shell脚本启动

  在看superdiamond的源码的时候,发现是基于netty写的服务端,启动是通过linuxshell脚本来启动的。

   启动netty容器,其实就是一个javamain函数,像最初的httpclient启动一个server监听一个端口一样。

   将容器(jettytomcat)嵌入到工程内部,然后通过LinuxShell脚本来运行工程,这种方式很好,可以简化程序的部署依赖环境。

   于是决定了解一下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: $@"

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 返回 truethen 后边的语句将会被执行;如果返回 false,不会执行任何语句。
最后必须以 fi 来结尾闭合 iffi 就是 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启动容器中的应用