從一個linux腳本中學習bash shell
以下是一個resin啟動腳本,其中可以學到很多bash shell的知識點
#!/bin/sh // bash shell腳本
#
# Linux startup script for Resin //#注釋
# chkconfig: 345 85 15
# description: Resin is a Java Web server.
# processname: wrapper.pl
#
# To install, configure this file as needed and copy init.resin
# to /etc/rc.d/init.d as resin. Then use "# /sbin/chkconfig resin reset"
#
JAVA_HOME=/usr/local/java/jdk // =號賦值
RESIN_HOME=/usr/local/resin
export JAVA_HOME RESIN_HOME // export 定義全局變量
JAVA=$JAVA_HOME/bin/java // $ 代表變量
#
# If you want to start the entire Resin process as a different user,
# set this to the user name. If you need to bind to a protected port,
# e.g. port 80, you can't use USER, but will need to use bin/resin.
#
USER=
#
# Set to the server id to start
#
#SERVER="-server app-a"
#
ARGS="-resin-home $RESIN_HOME $SERVER"
if test -r /lib/lsb/init-functions; then // 判斷語句 test -r /lib/lsb/init-functions 條件文件存在并可讀
. /lib/lsb/init-functions // . 代表源 同source /lib/lsb/init-functions
else //如果不符合上面的條件
log_daemon_msg () { //函數
if [ -z "$1" ]; then // -z "$1" 變量$1長度為0 // $1 腳本執行時傳過來的第一個參數
return 1 //返回
fi
if [ -z "$2" ]; then
echo -n "$1:" // -n 參數 輸出不換行
return
fi
echo -n "$1: $2"
}
log_end_msg () {
[ -z "$1" ] && return 1 // [ -z "$1" ]為真,執行 return 1
if [ $1 -eq 0 ]; then //比較,-eq等于
echo " ."
else
echo " failed!"
fi
return $1
}
fi
case "$1" in //case 選擇語句
start) //腳本第一個參數為start
log_daemon_msg "Starting resin" //調用函數,傳遞參數
if test -n "$USER"; then //條件:變量USER長度不為0
su $USER -c "$JAVA -jar $RESIN_HOME/lib/resin.jar $ARGS start" 1>/dev/null 2>/dev/null //su 以其它用戶執行 -c執行命令后恢復身份
else
$JAVA -jar $RESIN_HOME/lib/resin.jar $ARGS start 1>/dev/null 2>/dev/null //1>dev/null 執行正常信息輸出到空文件 2>錯誤信息
fi
log_end_msg $? // $? 上一條命令執行的結果 0表示成功,更多請查看其它文章
;;
stop)
log_daemon_msg "Stopping resin"
if test -n "$USER"; then
su $USER -c "$JAVA -jar $RESIN_HOME/lib/resin.jar $ARGS stop" 1>/dev/null 2>/dev/null
else
$JAVA -jar $RESIN_HOME/lib/resin.jar $ARGS stop 1>/dev/null 2>/dev/null
fi
log_end_msg $?
;;
restart)
$0 stop //$0 本腳本名
$0 start
;;
*) //除start stop restart外
echo "Usage: $0 {start|stop|restart}"
exit 1 //1表示有錯誤
esac
exit 0 //0表示沒有錯誤