shell脚本的含义是什么?

时间:2012-08-20 14:44:59

标签: shell

我是shell脚本的新手,以下是一个shell脚本:

$JAVA_HOME/bin/java -Dpid=MyJava \
    -Xms${HEAP_MIN}m -Xmx${HEAP_MAX}m -cp ${CPG_CLASSPATH} \
    -Dconfig=${CFG_FILE} \
    -Dcom.test.eps.configpath=${my_config}/ \
    -Dcom.test.eps.rt.config=${my_config}/ \
    -Dlog4j.configuration=file:///${my_config}/log4j.properties.ewf.rt \
    com.test.MyJava &

有人能告诉我上面每一行的代码含义吗?

3 个答案:

答案 0 :(得分:4)

$JAVA_HOME/bin/java - 调用位于当前用户环境中设置的$JAVA_HOME变量指定的文件夹的bin路径的JRE二进制文件。也就是说,它运行Java,特别是JAVA_HOME指向的版本。

尾随\是转义字符,它们在行的末尾转义换行符。通常在shell程序中,行末尾的换行符告诉shell你已完成命令,它现在可以解释它。使用\结束一行告诉shell命令将在下一行实际继续,即这是一个命令。

-Dpid=myJava - 为值为myJava的名为pid的jre设置系统属性。 Java程序基本上可以在运行时询问getProperty("pid"),它将返回"myJava"然后适当地选择它的行为,这是一种配置JRE运行的程序的方法。

-Xms${HEAP_MIN}m - 将javas min heap size设置为${HEAP_MIN} env var中的值。堆大小是jre为存储其堆栈跟踪而预留的内存量。

-Xmx${HEAP_MAX}m - 将Java的最大堆大小设置为${HEAP_MAX} env var。

中的值

-cp ${CPG_CLASSPATH} - 将Java类路径设置为${CPG_CLASSPATH} env var。

中的值

-Dconfig=${CFG_FILE} - 为值为$ {CFG_FILE}的名为config的JRE设置系统属性。

-Dcom.test.eps.configpath=${my_config}/ - 为名为com.test.eps.configpath的JRE设置值为${my_config}的系统属性。

-Dcom.test.eps.rt.config=${my_config}/ - 为名为com.test.eps.rt.config的JRE设置值为${my_config}的系统属性。

-Dlog4j.configuration=file:///${my_config}/log4j.properties.ewf.rt - 为值为file:///${my_config}/log4j.properties.ewf.rt的名为log4j.configuration的JRE设置系统属性。

com.test.MyJava是一个Java类,基本上位于com/test/MyJava.class的类路径上,可能有一个main函数。在JRE使用之前设置的所有配置进行初始化之后,它将运行此类并运行其主函数。

&告诉操作系统在自己的进程中运行此命令,而不是在cli将控制权交还给用户之前等待它返回。它基本上告诉操作系统在一个独立于运行shell的过程中运行该程序。

答案 1 :(得分:1)

假设您使用基于unix的系统,请查看:

http://www.manpagez.com/man/1/java/

这很复杂,所以也许你应该首先学习shell脚本的基础知识:

http://www.freeos.com/guides/lsst/

答案 2 :(得分:1)

随着shell的发展,那里没有任何本质上复杂的东西;然而,一遍又一遍地有很多相同的东西。

在最高级别,它是一个命令。行末尾的反斜杠继续执行命令,并显示下一行的信息。它调用目录$JAVA_HOME/bin中的JVM(Java虚拟机,它是JRE的关键组件,Java运行时环境),其中$JAVA_HOME(我相信你认识),一个shell变量;实际上,它应该是一个环境变量。使用10个参数调用JVM(除非我再次错误计算),并在后台运行(最后是&)。这意味着shell脚本启动JVM并且不等待它完成。

一些参数还包含shell变量的扩展形式,其中一些可能是环境变量(你不能简单地通过查看它们来确定哪些变量是环境变量,但是传统上,环境变量都是大写的,比如$JAVA_HOME)。备选表示法${HEAP_MAX}扩展变量HEAP_MAX,就像$HEAP_MAX一样。但是,在那个论点中,你不能(理智地)写:

-Xmx$HEAP_MAXm   # Wrong (in this context)

因为它查找变量$HEAP_MAXm;您使用大括号来分隔变量的名称。您还可以使用大括号中的名称执行许多其他操作,例如${JAVA_HOME:?}表示如果未设置$JAVA_HOME,则会生成错误消息并停止脚本。请参阅“参数扩展”手册。

对于JVM参数的含义,您需要查看手册页。但是,作为shell中的练习,其他参数都是已经讨论的内容的变体,使用不同的变量来标识JVM或其运行的程序所需的文件的位置。