设计思路
- 使用
getopts
命令:Bash 内置的 getopts
命令用于解析命令行参数,它可以方便地处理带短选项(如 -a
)和长选项(如 --all
)的参数。
- 定义清晰的参数结构:明确每个参数所代表的含义,例如
-s
代表服务名称, -o
代表操作类型, -c
代表配置文件路径。
- 错误处理:当用户输入的参数不符合预期时,提供详细的错误提示,告知用户正确的使用方式。
- 模块化设计:将不同功能封装成函数,提高脚本的可维护性和扩展性。例如,将启动、停止、重启服务的操作分别封装成不同的函数。
关键部分代码
#!/bin/bash
# 初始化变量
service_name=""
operation=""
config_path=""
# 解析命令行参数
while getopts ":s:o:c:" opt; do
case $opt in
s)
service_name="$OPTARG"
;;
o)
operation="$OPTARG"
;;
c)
config_path="$OPTARG"
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
# 检查必要参数是否设置
if [ -z "$service_name" ] || [ -z "$operation" ]; then
echo "Error: service name and operation are required."
echo "Usage: $0 -s <service_name> -o <operation> [-c <config_path>]"
exit 1
fi
# 定义启动服务函数
start_service() {
echo "Starting service $service_name with config $config_path"
# 实际启动服务的命令,例如:systemctl start $service_name
}
# 定义停止服务函数
stop_service() {
echo "Stopping service $service_name with config $config_path"
# 实际停止服务的命令,例如:systemctl stop $service_name
}
# 定义重启服务函数
restart_service() {
echo "Restarting service $service_name with config $config_path"
# 实际重启服务的命令,例如:systemctl restart $service_name
}
# 根据操作类型调用相应函数
case $operation in
start)
start_service
;;
stop)
stop_service
;;
restart)
restart_service
;;
*)
echo "Invalid operation: $operation"
echo "Valid operations are: start, stop, restart"
exit 1
;;
esac