Mac Bash - 无法识别[$#= 0]

时间:2013-08-07 18:59:28

标签: macos bash shell if-statement square-bracket

自从我用bash编写脚本以来已经有一段时间了,所以我制作了一个小脚本来测试。这是我的脚本(引用的文字是一些荷兰语,并不重要):

#isingelogd
if[$#=0]
then
    echo "Geef user-id's op!" 1>$2 ; exit 1
fi
for uid in $*
do
    if who|grep $uid >dev/null
    then
            echo $uid is ingelogd
    else
            echo $uid is niet ingelogd
    fi
done

如果我尝试运行它,它会告诉我以下内容:

bash-3.2$ ./isingelogd
./isingelogd
./isingelogd: line 3: if[0=0]: command not found
./isingelogd: line 4: syntax error near unexpected token `then'
./isingelogd: line 4: `then'

如果我用bash检查我的版本-v我正在运行3.2,我认为支持方括号。

有人有类似的问题并找到解决方案吗?

2 个答案:

答案 0 :(得分:2)

a.bash适用于Mac。 a.bash的内容如下:

#!/bin/bash

if [ $# == 0 ]; then
    echo "Usage da da do" 
fi

export A=$1
echo $A

然后执行以下操作:

\# ] ./a.bash

   Usage da da do

答案 1 :(得分:2)

看看你的错误:

  

bash-3.2 $ ./isingelogd
  ./isingelogd
  ./isingelogd:第3行: 如果[0 = 0]:找不到命令
  ./isingelogd:第4行:意外令牌then'
./isingelogd: line 4:
附近的语法错误,然后是

看到找不到命令?你的脚本有错误。

[ .. ]是实际命令,与所有命令一样,它们需要用空格分隔。 =[命令的参数,也需要用空格包围。将第3行更改为:

if [ $# -eq 0 ]

由于$#0是数字,因此您应该使用-eq与数字进行比较,而不是=来比较字符串。

尝试以下命令:

$ ls -li /bin/test
$ ls -li /bin/[

您会看到它们具有相同的inode编号。他们是链接。 (是的,[test是内置到shell中的,但它们是链接的内置命令)。

$ man test

将为您提供[可以执行的各种测试。再次注意-eq=-gt>之间的差异。

请注意以下事项:

if [ 54 > 123 ]
then
    echo "54 is greater than 123"
fi

这将打印出“ 54大于123 ”。这不会:

if [ 54 -gt 123 ]
then
   echo "54 is greater than 123"
fi