sh脚本:使用条件,git更新后脚本

sh脚本:使用条件,git更新后脚本,git,sh,conditional,Git,Sh,Conditional,我正在为git存储库编写更新后脚本,遇到了一些麻烦 无论出于何种原因,if语句都会引发错误: hooks/post-update: line 5: [master: command not found 我只是想检查一下被推送的分支是否等于“master”。我猜我的语法有问题,这是我的第一个sh脚本,但我尝试了几种变体,但没有成功 谢谢你的帮助 #!/bin/sh BRANCH=$(git rev-parse --symbolic --abbrev-ref $1) if ["$BRANCH"

我正在为git存储库编写更新后脚本,遇到了一些麻烦

无论出于何种原因,if语句都会引发错误:

hooks/post-update: line 5: [master: command not found
我只是想检查一下被推送的分支是否等于“master”。我猜我的语法有问题,这是我的第一个sh脚本,但我尝试了几种变体,但没有成功

谢谢你的帮助

#!/bin/sh

BRANCH=$(git rev-parse --symbolic --abbrev-ref $1)

if ["$BRANCH" = "master"]
then
    cd $HOME/domain.com || exit
else
    cd $HOME/dev.domain.com || exit
fi

unset GIT_DIR
git pull hub $BRANCH
git checkout $BRANCH
exec git-update-server-info

方括号必须是单独的标记!你看,它看起来像很好的语法,但事实是,有一个(在大多数shell中内置)命令
[
。因此语法应该是:

if [ "$BRANCH" = "master" ]
    ^                    ^
    +--------------------+-- There have to be spaces here!
如果没有第一个空格,命令将变成
[master
,并且这样的命令不存在——命令是
[
。如果没有第二个空格,正确的参数将是
master]
,并且将不匹配(并且
[
将失败,出现“缺少
]
参数”错误


详细说明:

shell
if
语法尽量简单。确实如此

if
command
than
command[
else
command]
fi

其中每个命令都必须以分号或行尾结束。因此,您可以编写如下内容

if grep -q foo somewhere
then
    whatever
fi
test "$foo" == "bar"
test -n "$this_variable_must_be_nonempty"
test -f "$this_file_should_exist"
现在,在许多情况下,您需要执行诸如比较字符串、比较数字、测试文件是否存在、测试一个文件是否比另一个文件更新等操作。为此,有一个标准命令
test
(它在大多数shell中内置,但外部版本始终存在)。它允许以下操作

if grep -q foo somewhere
then
    whatever
fi
test "$foo" == "bar"
test -n "$this_variable_must_be_nonempty"
test -f "$this_file_should_exist"
这是在if中使用的。为了更好的语法,此命令有别名
[
,它接受完全相同的参数,只是它需要
]
作为最后一个参数,因此条件看起来很漂亮。这也是大多数shell中内置的,但通常也作为符号链接存在于
测试中。因此,不要被特殊语法所愚弄;这是简单的程序调用