我试图创建一个自定义CLI &我遇到了一个问题。
这是我的代码。
#!/bin/bash
# Function definations.
__help_menu() {
echo -e ""
echo -e "======================="
echo -e "THESE ARE THE AVAILABLE COMMANDS:"
echo -e ""
echo -e "⟹ ./cli.sh --create -domain example.com"
echo -e "⟹ ./cli.sh --create -domain example.com -ssl <no|yes>"
echo -e "⟹ ./cli.sh --create -domain example.com -ssl <yes|no> -wp <yes|no>"
echo -e "⟹ ./cli.sh --delete -domain example.com"
echo -e "⟹ ./cli.sh --delete -domain example.com -ssl <yes|no>"
echo -e "======================="
echo -e ""
}
__create() {
# Do something. I got this.
echo -e "I got this"
}
__delete() {
# Do something. I got this.
echo -e "I got this"
}
__cli() {
# Run while loop.
while [[ "$#" -gt 0 ]]; do
case $1 in
--create)
shift
case $1 in
-domain)
DOMAIN_NAME="$2";
shift
;;
-ssl)
INSTALL_SSL="$2";
shift
;;
-wp|--wp)
INSTALL_WP="$2";
shift
;;
*)
echo -e "Unknown parameter passed: $1";
__help_menu
exit
;;
esac
;;
--delete)
shift
case $1 in
-domain)
DOMAIN_NAME="$2";
shift
;;
-ssl)
DELETE_SSL="$2";
shift
;;
*)
echo -e "Unknown parameter passed: $1";
__help_menu
exit
;;
esac
;;
--help) __help_menu; exit ;;
*) echo -e "Unknown parameter passed: $1"; exit 1 ;;
esac
shift
done
}
__cli "$@"
if [ "$1" == "--create" ]; then
echo -e "Command is to create a new site."
echo -e "Domain name: $DOMAIN_NAME"
echo -e "Install SSL: $INSTALL_SSL"
echo -e "Install WP: $INSTALL_WP"
echo -e ""
fi
字符串
当我运行./cli.sh --create -domain example.com
时,它工作正常。但是当我运行./cli.sh --create -domain example.com -ssl yes
时,它说Unknown parameter passed:-ssl。我在哪里做错了?
另一个问题:
用foo --create -domain hello.com
替换./cli.sh --create -domain hello.com
的最佳方法是什么,这样我就可以在终端的任何地方使用CLI。
2条答案
按热度按时间zbwhf8kr1#
如何使用GNU
getopt
简化命令行解析的示例:字符串
使用方法:
型
--ssl
和--wp
的默认值为“yes”。ddarikpa2#
@ceving
我想我得到了我想要的东西。我将进一步研究
getopt
命令。我做了一个简单的调整。它可以工作。字符串
顺便说一句,为了用
foo create --domain example.com
替换./cli.sh create --domain example.com
,我应该添加一个指向./cli.sh
文件的文件夹,或者有更好的方法吗?