我已经在linux bash中编写了一个程序,以下是启动/停止该程序的方法:
start_program
stop_program
restart_program.
我在/ usr / bin中复制了上面的脚本,因此这些脚本作为命令工作。但我想要而不是上面的命令我只需键入程序名称然后将操作作为参数传递。例如,如果我想启动程序,那么我应该在命令提示符下写:
ProgramName start
如果我想卸载那么
ProgramName uninstall
如果重启
ProgramName restart
所以我怎么能做到这一点我只是编写程序名称然后传递动作作为参数并按回车来做那件事。
答案 0 :(得分:11)
一种常见的方法是使用案例陈述:
case "$1" in
start)
# Your Start Code
;;
stop)
# Your Stop Code
;;
restart)
# Your Restart Code
;;
*)
echo "Usage: $0 {start|stop|restart}" >&2
exit 1
;;
esac
如果您的restart
只是stop
,那么start
,您就可以:
start() {
# Your Start Code
}
stop() {
# Your Stop Code
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart}" >&2
exit 1
;;
esac
答案 1 :(得分:2)
答案 2 :(得分:0)
以下是案例陈述的替代方案。
使用bash / shell中的参数使用if语句启动/停止/重启/卸载程序。
#!/bin/bash
start_module() {
# Your start Code
}
stop_module() {
# Your stop Code
}
restart_module() {
# Your restart Code
}
uninstall_module() {
# Your uninstall Code
}
if [ $# != 1 ]; then # If Argument is not exactly one
echo "Some message"
exit 1 # Exit the program
fi
ARGUMENT=$(echo "$1" | awk '{print tolower($0)}') # Converts Argument in lower case. This is to make user Argument case independent.
if [[ $ARGUMENT == start ]]; then
start_module
elif [[ $ARGUMENT == stop ]]; then
stop_module
elif [[ $ARGUMENT == uninstall ]]; then
uninstall_module
elif [[ $ARGUMENT == restart ]]; then
restart_module
else
echo "Only one valid argument accepted: START | STOP | RESTART | UNINSTALL
case doesn't matter. "
fi
将此代码保存到myScript.sh
Usage:
./myScript.sh Start
./myScript.sh Stop
./myScript.sh check
./myScript.sh uninstall
这是an example of a real-world program,体现了这种执行方式。
侧注: 可以轻松省略任何现有模块/功能或添加其他模块/功能。
如何取出/禁止某个特定模块运行(比如维护)?
关闭 if特定模块if语句块 将禁用它,因为该模块在运行时不会被调用。