rc.d 脚本默认给定一个 "start" 参数?
rc.d script given a "start" argument by default?
我的objective是做一个bash脚本服务,当运行级别为5时创建一个文件,当运行级别为3时删除该文件。
我遇到的问题是当我到达运行级别 3 时。我得到:
The current lvl is : 3 and number of arguments is : 1 I am at line 10
. The command is start
为什么开始争论而我没有通过任何争论。
函数 start 用于创建文件,函数 stop 用于删除文件,它们工作正常
如果我删除参数数量的测试条件并让脚本在文件处于 lvl 3 时删除文件,我可以使脚本正常工作
但是它告诉我参数的数量是 1 并且它开始的事情并没有进入我的脑海。我已经做了很多研究,但没有找到任何解决方案。
#! /bin/bash
# chkconfig: 35 99 01
# description : some startup script
#### Constants
FILE="/home/ayadi/Desktop/inittp"
CURRENT_LVL="$(runlevel | awk '{print }')"
echo "The current lvl is : $CURRENT_LVL and number of arguments is : $# "
echo "I am at line 10 . The command is "
#### Functions
start(){
if ! [[ -f "$FILE" ]];
then
touch "$FILE"
echo "File Created..."
else
echo "File Does Exist..."
fi
}
stop(){
if [[ -f "$FILE" ]];
then
rm "$FILE"
echo "File Deleted..."
else
echo "File Does Not Exist..."
fi
}
#### Main
if [ $# -eq 0 ]
then
echo "Entred the arguments -eq 0"
if [ "$CURRENT_LVL" == "5" ]
then
echo "Entred the if current lvl 5 statement"
start
fi
if [ "$CURRENT_LVL" == "3" ]
then
echo "Entred the if current lvl 3 statement"
stop
fi
else
case "" in
[sS][tT][aA][rR][tT])
if ! ([ -e "$FILE" ])
then
echo "I am the case statement.the command is "
start
fi
;;
[sS][tT][oO][pP])
if [ -e "$FILE" ]
then
stop
fi
;;
*)
echo "Please enter start or stop"
;;
esac
fi
调试建议,从这里改成:
echo "The current lvl is : $CURRENT_LVL and number of arguments is : $# "
echo "I am at line 10 . The command is "
为此:
echo "The current lvl is : $CURRENT_LVL and number of arguments is : $# "
echo "I am at line 10 . The command is \"\", the whole command line is \"[=11=] $@\""
这不会解决问题,但它会提供有关实际情况的更多信息。
#Main
可以简化。它不会解决任何问题,但它会让你更容易思考:
#### Main
case "${1,,}" in
"") echo "Entered no arguments."
case "$CURRENT_LVL" in
3|5) echo "Entered the if current level ${CURRENT_LVL} statement" ;;&
5) start ;;
3) stop ;;
esac ;;
start) if ! [ -e "$FILE" ] ; then
echo "I am the case statement.the command is "
start
fi ;;
stop) [ -e "$FILE" ] && stop ;;
*) echo "Please enter start or stop" ;;
esac
注意bash
主义。 ${1,,}
returns </code> 小写。 <code>;;&
跳转到下一个 case
测试,而不是跳转到 ecase
.
默认情况下,当服务在特定 运行 级别自动调用 运行 时,会为其分配 "start" 参数。
我的objective是做一个bash脚本服务,当运行级别为5时创建一个文件,当运行级别为3时删除该文件。
我遇到的问题是当我到达运行级别 3 时。我得到:
为什么开始争论而我没有通过任何争论。The current lvl is : 3 and number of arguments is : 1 I am at line 10 . The command is start
函数 start 用于创建文件,函数 stop 用于删除文件,它们工作正常
如果我删除参数数量的测试条件并让脚本在文件处于 lvl 3 时删除文件,我可以使脚本正常工作
但是它告诉我参数的数量是 1 并且它开始的事情并没有进入我的脑海。我已经做了很多研究,但没有找到任何解决方案。
#! /bin/bash
# chkconfig: 35 99 01
# description : some startup script
#### Constants
FILE="/home/ayadi/Desktop/inittp"
CURRENT_LVL="$(runlevel | awk '{print }')"
echo "The current lvl is : $CURRENT_LVL and number of arguments is : $# "
echo "I am at line 10 . The command is "
#### Functions
start(){
if ! [[ -f "$FILE" ]];
then
touch "$FILE"
echo "File Created..."
else
echo "File Does Exist..."
fi
}
stop(){
if [[ -f "$FILE" ]];
then
rm "$FILE"
echo "File Deleted..."
else
echo "File Does Not Exist..."
fi
}
#### Main
if [ $# -eq 0 ]
then
echo "Entred the arguments -eq 0"
if [ "$CURRENT_LVL" == "5" ]
then
echo "Entred the if current lvl 5 statement"
start
fi
if [ "$CURRENT_LVL" == "3" ]
then
echo "Entred the if current lvl 3 statement"
stop
fi
else
case "" in
[sS][tT][aA][rR][tT])
if ! ([ -e "$FILE" ])
then
echo "I am the case statement.the command is "
start
fi
;;
[sS][tT][oO][pP])
if [ -e "$FILE" ]
then
stop
fi
;;
*)
echo "Please enter start or stop"
;;
esac
fi
调试建议,从这里改成:
echo "The current lvl is : $CURRENT_LVL and number of arguments is : $# "
echo "I am at line 10 . The command is "
为此:
echo "The current lvl is : $CURRENT_LVL and number of arguments is : $# "
echo "I am at line 10 . The command is \"\", the whole command line is \"[=11=] $@\""
这不会解决问题,但它会提供有关实际情况的更多信息。
#Main
可以简化。它不会解决任何问题,但它会让你更容易思考:
#### Main
case "${1,,}" in
"") echo "Entered no arguments."
case "$CURRENT_LVL" in
3|5) echo "Entered the if current level ${CURRENT_LVL} statement" ;;&
5) start ;;
3) stop ;;
esac ;;
start) if ! [ -e "$FILE" ] ; then
echo "I am the case statement.the command is "
start
fi ;;
stop) [ -e "$FILE" ] && stop ;;
*) echo "Please enter start or stop" ;;
esac
注意bash
主义。 ${1,,}
returns </code> 小写。 <code>;;&
跳转到下一个 case
测试,而不是跳转到 ecase
.
默认情况下,当服务在特定 运行 级别自动调用 运行 时,会为其分配 "start" 参数。