一些情况下,比如使用JDK自带工具包,我们需要进到$JAVA_HOME/bin目录下去执行某个脚本,这时候可以在我们统一存放脚本的目录下写一个简单的脚本,来方便操作
脚本文件均命名为:jutils.sh
直接执行的命令
#!/bin/sh
#进入要执行的脚本目录
cd $JAVA_HOME/bin/
#-z表示字符串为空,-n表示字符串不空,${1}取第一个参数
if [ -z ${1} ]
then
#ls和cat的默认宽度不一样,ls结果经过cat之后会纵向排列
ls
echo '--------------------------------------------'
#read: usage: read [-ers] [-u fd] [-t timeout] [-p prompt] [-a array] [-n nchars] [-d delim] [name ...](如果之前有定义cmd变量,内容会被覆盖掉)
read -t 30 -p "Please enter the command:" cmd
else
cmd=$*
fi
$cmd
使用方法:
$./jutils.sh ./jvisualvm
或者
$./jutils.sh
appletviewer java jcmd jmc jstatd policytool servertool
apt javac jconsole jps jvisualvm rmic tnameserv
extcheck javadoc jdb jrunscript keytool rmid unpack200
idlj javafxpackager jhat jsadebugd native2ascii rmiregistry wsgen
jar javah jinfo jstack orbd schemagen wsimport
jarsigner javap jmap jstat pack200 serialver xjc
--------------------------------------------
Please enter the command:./jvisualvm
后台启动,需要加上nohup,然后保存pid
#!/bin/sh
#进入存放日志及pid文件的目录
cd ~/sh/
#date +%F取日期,+%T取时间
dir=`pwd`"/logs/`date +%F`"
#-e判断路径是否存在,-a与运算符,-d判断文件夹是否存在
if [ -e $dir -a ! -d $dir ];
then
rm -rf $dir
fi
if [ ! -e $dir ]
then
#-p创建全目录
mkdir -p $dir
fi
cd $JAVA_HOME/bin/
#-z表示字符串为空,-n表示字符串不空,${1}取第一个参数
if [ -z ${1} ]
then
#ls和cat的默认宽度不一样,ls结果经过cat之后会纵向排列
ls
echo '--------------------------------------------'
#read: usage: read [-ers] [-u fd] [-t timeout] [-p prompt] [-a array] [-n nchars] [-d delim] [name ...](如果之前有定义cmd变量,内容会被覆盖掉)
read -t 30 -p "Please enter the command:" cmd
else
cmd=$*
fi
#将传进来的参数转化为数组
_array=($cmd)
#${arr[i]}取数组第i位的值
execfilepath=${_array[0]}
#target#pattern最小匹配截取,target##pattern最大匹配截取
filename=${execfilepath##*/}
filepath=$dir"/$filename.log"
#-f判断文件是否存在
if [ -e $filepath -a ! -f $filepath ]
then
rm $filepath
fi
if [ ! -e $filepath ]
then
#创建文件
touch $filepath
fi
pidfilepath=$dir/pid.txt
if [ ! -f $pidfilepath ]
then
touch $pidfilepath
fi
echo "nohup $cmd>$filepath 2>&1 & echo $!>$pidfilepath"
nohup $cmd>$filepath 2>&1 & echo $!>$pidfilepath