2

自从我用 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。

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

4

2 回答 2

2

看看你的错误:

bash-3.2$ ./isingelogd
./isingelogd
./isingelogd:第 3 行:if[0=0]:找不到命令
./isingelogd:第 4 行:出现意外标记附近的语法错误then'then'
./isingelogd: line 4:

看到那个命令没有找到吗?您的脚本中有错误。

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

if [ $# -eq 0 ]

由于$#and0是数字,你应该使用-eqwhich 比较数字而不是=which 比较字符串。

试试这些命令:

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

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

$ man test

会给你所有可以做的各种测试再次注意vs.和vs.[之间的区别。-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
于 2013-08-07T19:52:54.613 回答
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
于 2013-08-07T19:09:06.017 回答