git - 在 shell 中,有没有办法创建一个 if 语句来查找除任何内容之外的任何内容,以及如何解析参数?
问题描述
我正在尝试编写一个自动化 git 推送过程的 shell 脚本;添加、提交和推送。完整的代码在这里。我希望它能够工作,所以当我通过参数时-f
,我可以跟随我的提交消息。这是我到目前为止所拥有的:
fast() {
git add -A
echo ":: All changes tracked and staged."
if [ "$2" = "" ]
then
read -p "› Enter commit message: " commit
echo
echo "⇓ GIT OUTPUT ⇓"
git commit -m "$commit"
echo
else
echo "⇓ GIT OUTPUT ⇓"
git commit -m "$*"
echo
fi
echo ":: Pushing to remote master."
echo
echo "⇓ GIT OUTPUT ⇓"
git push -u origin master
echo
echo "Thanks for using pushall! Exiting..."
exit
}
我目前遇到的问题是该if
语句没有按预期工作。无论我在 之后放什么-f
,它总是要求我输入提交信息。我试图做到这一点,所以如果我只是跑pushall -f
它会询问消息,但如果我跑了pushall -f foo
,它会提交消息“foo”,而不是询问。
另外,在我让if
语句生效后,我如何才能让消息只有 3 美元及以上,而不是 0 美元、1 美元和 2 美元?我把 $* 作为一个占位符,但我不知道我将如何实际实现它。任何帮助表示赞赏,谢谢。
解决方案
shell 函数中的 shell 参数是*该函数*的参数,不是调用者的参数,而是它提供的参数。你有
if [ "$1" = "-f" ] || [ "$1" = "--fast" ]
then
fast
所以你的fast
调用根本不提供任何参数。
它已经失宠了,因为它具有老式 git-r-dun 的味道,但我认为选项处理最好使用getopts
and来完成case
。
while getopts f:-: opt; do case $opt in
f) message="$OPTARG" ;;
-) case $OPTARG in
fast) message="${!OPTIND}"; ((++OPTIND));;
esac ;;
esac; done; shift $((OPTIND-1))
推荐阅读
- docker - Sonarqube Elasticsearch 错误 - 超过低磁盘水印 [85%]
- javascript - Youtube 视频嵌入:当控件=0 时如何删除右下角的 youtube 徽标(modestbranding=1 不起作用)
- android - Picasso 仅在 recyclerView 的最后一项中加载图像缩略图
- swift - 为什么确认窗口在 viewDidLoad 中消失了?
- c++ - 是否为每个不同大小的 std::array 编译了一个全新的类?
- javascript - 如何制作不和谐机器人以在其他公会中创建邀请
- android - 如何将选定的日期数据传递给意图?
- php - 使用 route() 时 Laravel 刀片“未定义变量”错误
- javascript - 从表中获取数据并保存到数据库
- powershell - 如何在 Powershell 中执行相当于 $PROGPATH/program 的 bash?