自从我用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,我认为支持方括号。
有人有类似的问题并找到解决方案吗?
答案 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