#!/bin/bash
function usage(){
echo "Usage Example: ./install_start.sh -d /opt/modules/daemon -s 2012 -i 192.168.0.1 -p 8080"
echo "-d install directory path";
echo "-s daemon boot start port";
echo "-i cronhub center server's ip is used for download daemon's jar and jdk and jsvc and so on"
echo "-p cronhub center server's port used for download daemon's jar and jdk and jsvc and so on"
}
if [ $# -ne 8 ];#如果參數沒有8個,算上-s啥的,那麼就從用戶輸入讀入
then
echo "please input the directory path that you want to install";
read install_path;
echo "please input the cronhub center server's ip..."
read center_server_ip;
echo "please input the cronhub center server's port..."
read center_server_port;
echo "please input the daemon boot start port..."
read daemon_port;
function usage(){
echo "Usage Example: ./install_start.sh -d /opt/modules/daemon -s 2012 -i 192.168.0.1 -p 8080"
echo "-d install directory path";
echo "-s daemon boot start port";
echo "-i cronhub center server's ip is used for download daemon's jar and jdk and jsvc and so on"
echo "-p cronhub center server's port used for download daemon's jar and jdk and jsvc and so on"
}
if [ $# -ne 8 ];#如果參數沒有8個,算上-s啥的,那麼就從用戶輸入讀入
then
echo "please input the directory path that you want to install";
read install_path;
echo "please input the cronhub center server's ip..."
read center_server_ip;
echo "please input the cronhub center server's port..."
read center_server_port;
echo "please input the daemon boot start port..."
read daemon_port;
#下面就是shell的多行註釋的方法
:<<BLOCK
usage
BLOCK
exit -1
else
whilegetopts":d:i:h:p:s:" flag #傳入參數,第一個冒號表示,後面的每個比如s後的冒號表示傳入-s 2012,後面帶參數
do
case $flag in
d)
echo "install directory path: "$OPTARG
install_path=$OPTARG
;;
i)
echo "cronhub center server's ip: "$OPTARG
center_server_ip=$OPTARG
;;
p)
echo "cronhub center server's port: "$OPTARG
center_server_port=$OPTARG
;;
s)
echo "daemon boot start port's port: "$OPTARG
daemon_port=$OPTARG
;;
?) usage
;;
esac
done
fi
mkdir -p $install_path
cd $install_path;
jdk_bin="jdk.bin";
jdk_bin_path=$install_path"/"$jdk_bin;
java_home=$install_path"/jdk1.6.0_30";
base_url="http://${center_server_ip}:${center_server_port}/download/";
jdk_download_url=$base_url"jdk-6u30-linux-x64.bin"
jsvc_zip="jsvc.zip";
jsvc_dir="jsvc";
jsvc_url=$base_url$jsvc_zip;
jar_name="DispatchSystemDaemon.jar";
daemon_url=$base_url$jar_name;
daemon_jar_path=$install_path"/"$jar_name;
jsvc_dir=$install_path"/"$jsvc_dir;
jsvc_target_bin=$jsvc_dir"/jsvc";
#install jdk
if [ ! -e $jdk_bin_path ];
then
wget $jdk_download_url -O $jdk_bin_path;
chmod 755 $jdk_bin_path;
$jdk_bin_path;
fi;
#install jsvc
if [ ! -e $install_path"/"$jsvc_zip ];
then
wget $jsvc_url;
fi
if [[ -e $install_path"/"$jsvc_zip && ! -e $jsvc_target_bin ]];
then
unzip $jsvc_zip;
fi;
if [ ! -e $jsvc_target_bin ];
then
cd $jsvc_dir;
chmod +x configure;
chmod +x make;
./configure --with-java=$java_home;
make;
cd $install_path;
fi;
#install daemon jar
if [ ! -e $daemon_jar_path ];
then
wget $daemon_url;
fi;
ps_num=`ps -ef|grep $jar_name|grep $daemon_port|grep -v grep|grep -v sh|wc -l`;
if [ $ps_num -gt 0 ];
then
kill_pid=`ps -ef|grep $jar_name|grep $daemon_port|grep -v grep|grep -v sh|awk -F ' ' '{print $2}'`;
echo "kill "$kill_pid" .process numer is "$ps_num;
kill $kill_pid;
echo "killing service to reboot service...";
sleep 2;
fi;
#add to system service
cmd="$jsvc_target_bin -home $java_home -Xmx2000m -pidfile $install_path/$daemon_port.pid -cp $daemon_jar_path com.baofeng.dispatchexecutor.boot.DaemonBoot -p $daemon_port";
echo -e "#description:cronhub_daemon
#chkconfig:231 80 80
case \"\$1\" in
start)
\t${install_path}/jsvc/jsvc -home ${install_path}/jdk1.6.0_30 -Xmx2000m -pidfile ${install_path}/$daemon_port.pid -cp ${install_path}/DispatchSystemDaemon.jar com.baofeng.dispatchexecutor.boot.DaemonBoot -p $daemon_port
\t;;
esac
" > /etc/init.d/cronhub_daemon
/sbin/chkconfig --add cronhub_daemon
#start daemon
echo "adding to service done,now start daemon service..."
chmod +x /etc/init.d/cronhub_daemon
/sbin/service cronhub_daemon start
echo "all done"
#the final start cmd
#$jsvc_target_bin -home $java_home -Xmx2000m -pidfile $install_path"/"$daemon_port".pid" -cp $daemon_jar_path com.baofeng.dispatchexecutor.boot.DaemonBoot -p $daemon_port
【轉載】shell的getopts範例
:<<BLOCK
usage
BLOCK
exit -1
else
whilegetopts":d:i:h:p:s:" flag #傳入參數,第一個冒號表示,後面的每個比如s後的冒號表示傳入-s 2012,後面帶參數
如果選項字符串不以:(冒號)開頭,名稱 將會被設置爲 ?(問號)字符,OPTARG. 將被取消設置,並且診斷消息將被寫入到標準錯誤中。
如果選項字符串以 :(冒號)開頭,名稱 將被設爲 ? (問號)字符,這是對未知的選項來說的,或者爲缺少的所需選項設爲:(冒號)字符,OPTARG 將被設置爲已查找到的選項字符,並且 標準錯誤中將不寫入任何輸出。
細則1:當optstring以”:“開頭時,getopts會區分invalid option錯誤和miss option argument錯誤。
invalid option時,varname會被設成?,$OPTARG是出問題的option;
miss option argument時,varname會被設成:,$OPTARG是出問題的option。
如果optstring不以”:“開頭,invalid option錯誤和miss option argument錯誤都會使
varname被設成?,$OPTARG是出問題的option。
細則2:當optstring中的字母跟”:“時,表明該option可接參數,參數(argument)放在$OPTARG中;
如果缺參數,且optstring是以”:“開頭,則varname的值會是:,$OPTARG是該option,
否則varname的值是?,$OPTARG是該option。(參照細則1)
invalid option時,varname會被設成?,$OPTARG是出問題的option;
miss option argument時,varname會被設成:,$OPTARG是出問題的option。
如果optstring不以”:“開頭,invalid option錯誤和miss option argument錯誤都會使
varname被設成?,$OPTARG是出問題的option。
細則2:當optstring中的字母跟”:“時,表明該option可接參數,參數(argument)放在$OPTARG中;
如果缺參數,且optstring是以”:“開頭,則varname的值會是:,$OPTARG是該option,
否則varname的值是?,$OPTARG是該option。(參照細則1)
如果只想敲入sh run.sh -d而不加-d後的參數,則該d不用加屁股後的冒號,如果要傳入參數,則需要加字母后面的冒號
do
case $flag in
d)
echo "install directory path: "$OPTARG
install_path=$OPTARG
;;
i)
echo "cronhub center server's ip: "$OPTARG
center_server_ip=$OPTARG
;;
p)
echo "cronhub center server's port: "$OPTARG
center_server_port=$OPTARG
;;
s)
echo "daemon boot start port's port: "$OPTARG
daemon_port=$OPTARG
;;
?) usage
;;
esac
done
fi
mkdir -p $install_path
cd $install_path;
jdk_bin="jdk.bin";
jdk_bin_path=$install_path"/"$jdk_bin;
java_home=$install_path"/jdk1.6.0_30";
base_url="http://${center_server_ip}:${center_server_port}/download/";
jdk_download_url=$base_url"jdk-6u30-linux-x64.bin"
jsvc_zip="jsvc.zip";
jsvc_dir="jsvc";
jsvc_url=$base_url$jsvc_zip;
jar_name="DispatchSystemDaemon.jar";
daemon_url=$base_url$jar_name;
daemon_jar_path=$install_path"/"$jar_name;
jsvc_dir=$install_path"/"$jsvc_dir;
jsvc_target_bin=$jsvc_dir"/jsvc";
#install jdk
if [ ! -e $jdk_bin_path ];
then
wget $jdk_download_url -O $jdk_bin_path;
chmod 755 $jdk_bin_path;
$jdk_bin_path;
fi;
#install jsvc
if [ ! -e $install_path"/"$jsvc_zip ];
then
wget $jsvc_url;
fi
if [[ -e $install_path"/"$jsvc_zip && ! -e $jsvc_target_bin ]];
then
unzip $jsvc_zip;
fi;
if [ ! -e $jsvc_target_bin ];
then
cd $jsvc_dir;
chmod +x configure;
chmod +x make;
./configure --with-java=$java_home;
make;
cd $install_path;
fi;
#install daemon jar
if [ ! -e $daemon_jar_path ];
then
wget $daemon_url;
fi;
ps_num=`ps -ef|grep $jar_name|grep $daemon_port|grep -v grep|grep -v sh|wc -l`;
if [ $ps_num -gt 0 ];
then
kill_pid=`ps -ef|grep $jar_name|grep $daemon_port|grep -v grep|grep -v sh|awk -F ' ' '{print $2}'`;
echo "kill "$kill_pid" .process numer is "$ps_num;
kill $kill_pid;
echo "killing service to reboot service...";
sleep 2;
fi;
#add to system service
cmd="$jsvc_target_bin -home $java_home -Xmx2000m -pidfile $install_path/$daemon_port.pid -cp $daemon_jar_path com.baofeng.dispatchexecutor.boot.DaemonBoot -p $daemon_port";
echo -e "#description:cronhub_daemon
#chkconfig:231 80 80
case \"\$1\" in
start)
\t${install_path}/jsvc/jsvc -home ${install_path}/jdk1.6.0_30 -Xmx2000m -pidfile ${install_path}/$daemon_port.pid -cp ${install_path}/DispatchSystemDaemon.jar com.baofeng.dispatchexecutor.boot.DaemonBoot -p $daemon_port
\t;;
esac
" > /etc/init.d/cronhub_daemon
/sbin/chkconfig --add cronhub_daemon
#start daemon
echo "adding to service done,now start daemon service..."
chmod +x /etc/init.d/cronhub_daemon
/sbin/service cronhub_daemon start
echo "all done"
#the final start cmd
#$jsvc_target_bin -home $java_home -Xmx2000m -pidfile $install_path"/"$daemon_port".pid" -cp $daemon_jar_path com.baofeng.dispatchexecutor.boot.DaemonBoot -p $daemon_port
【轉載】shell的getopts範例
getopts使用說明:
這裏的option-string是一個字符串,它包含了getopts所應該考慮的所有單個選項字符。var是該選項應該被設置的變量的名字,通常而言,var是一個名爲OPTION的變量。
getopts對命令行中給出的選項進行解釋的步驟如下。
1.getopts檢查所有的命令行參數,查找以-爲字符開頭的參數。
2.當發現一個以-字符開頭的參數時,它比較-之後緊接着的字符與給定的option-string中所有字符。
3.如果發現該字符在option-string中有匹配,則把該選項字符賦予變量var;否則,var的值設置爲?字符。
4.重複步驟1~3,直到命令行中給出的所有選項都被檢查完。
5.當選項解析完成後,getopts返回一個非0的退出碼--這使得getopts很容易地被使用在循環中。另外,當getopts結束時,它被變量OPTION的值設置爲最後一個參數的下標。
getopts的另一個特點是它能夠指出哪些選項要求帶參數,這是通過在選項後面附加一個冒號(:)字符來實現的。在這種情況下,解析一個選項後,附帶的參數就會設置爲變量OPTARG的值。
最近在學shell,剛看到getopts,搜到這個貼。上面getopts的用法來自<精通shell編程>這本書。對着書看上面的腳本。很容易看懂
getopts對命令行中給出的選項進行解釋的步驟如下。
1.getopts檢查所有的命令行參數,查找以-爲字符開頭的參數。
2.當發現一個以-字符開頭的參數時,它比較-之後緊接着的字符與給定的option-string中所有字符。
3.如果發現該字符在option-string中有匹配,則把該選項字符賦予變量var;否則,var的值設置爲?字符。
4.重複步驟1~3,直到命令行中給出的所有選項都被檢查完。
5.當選項解析完成後,getopts返回一個非0的退出碼--這使得getopts很容易地被使用在循環中。另外,當getopts結束時,它被變量OPTION的值設置爲最後一個參數的下標。
getopts的另一個特點是它能夠指出哪些選項要求帶參數,這是通過在選項後面附加一個冒號(:)字符來實現的。在這種情況下,解析一個選項後,附帶的參數就會設置爲變量OPTARG的值。
最近在學shell,剛看到getopts,搜到這個貼。上面getopts的用法來自<精通shell編程>這本書。對着書看上面的腳本。很容易看懂
#!/sbin/sh
# ftpuseradd
usage()
{
echo "Usage: `basename $0` [-w] [-m maxrate] username password"
exit 1
}
WRITABLE="no" # can't upload
MAXRATE="64000" # default max rate is 64Kb
OPT="no"
while getopts :wm: OPTION
do
case $OPTION in
w) WRITABLE="yes"
OPT="yes"
;;
m) MAXRATE=$OPTARG
OPT="yes"
;;
\?) usage
;;
esac
done
shift `expr $OPTIND - 1`
if [ $# -ne 2 ]
then
usage
fi
USERNAME=$1
PASSWORD=$2
useradd -d /dev/null -g ftp -s /bin/false $USERNAME
if [ $? -eq 0 ]
then
setpasswd.exp $USERNAME $PASSWORD > /dev/null
echo "anon_world_readable_only=NO" > /etc/vsftpd/$USERNAME
echo "anon_max_rate=$MAXRATE" >> /etc/vsftpd/$USERNAME
if [ "$WRITABLE" = "yes" ]
then
echo "write_enable=YES" >> /etc/vsftpd/$USERNAME
echo "anon_upload_enable=YES" >> /etc/vsftpd/$USERNAME
echo "anon_mkdir_write_enable=YES" >> /etc/vsftpd/$USERNAME
echo "anon_other_write_enable=YES" >> /etc/vsftpd/$USERNAME
fi
echo "$USERNAME" >> /etc/vsftpd.user_list
# ftpuseradd
usage()
{
echo "Usage: `basename $0` [-w] [-m maxrate] username password"
exit 1
}
WRITABLE="no" # can't upload
MAXRATE="64000" # default max rate is 64Kb
OPT="no"
while getopts :wm: OPTION
do
case $OPTION in
w) WRITABLE="yes"
OPT="yes"
;;
m) MAXRATE=$OPTARG
OPT="yes"
;;
\?) usage
;;
esac
done
shift `expr $OPTIND - 1`
if [ $# -ne 2 ]
then
usage
fi
USERNAME=$1
PASSWORD=$2
useradd -d /dev/null -g ftp -s /bin/false $USERNAME
if [ $? -eq 0 ]
then
setpasswd.exp $USERNAME $PASSWORD > /dev/null
echo "anon_world_readable_only=NO" > /etc/vsftpd/$USERNAME
echo "anon_max_rate=$MAXRATE" >> /etc/vsftpd/$USERNAME
if [ "$WRITABLE" = "yes" ]
then
echo "write_enable=YES" >> /etc/vsftpd/$USERNAME
echo "anon_upload_enable=YES" >> /etc/vsftpd/$USERNAME
echo "anon_mkdir_write_enable=YES" >> /etc/vsftpd/$USERNAME
echo "anon_other_write_enable=YES" >> /etc/vsftpd/$USERNAME
fi
echo "$USERNAME" >> /etc/vsftpd.user_list