我目前正在关注位于以下位置的有关shell脚本的教程:http : //www.cs.columbia.edu/~sauce/tutorial/ashell.html,我相信我的脚本与之完全匹配。但是,当我尝试运行该示例时,我的输出不匹配。由于我不想模糊,只问“为什么不起作用?”,所以我将集中讨论我不理解的部分:为什么":"
在testlogin:
命令后会有一个?我读过很多论坛,它们讨论" : "
(在两边都留有空格)的含义,也讨论了一个领导":"
,但都没有提到滞后冒号的用法。在这种情况下是什么意思?如果这是一个错字,有人可以帮助我在示例中查找另一个错字吗?
任何帮助将不胜感激!
代码(完全从我上面链接的站点复制)如下:
#testlogin
useron(){
if ( who | grep $1 > /dev/null)
then echo $1 is logged in
else echo $1 is not logged in
fi
}
if test $# != 1
then echo testlogin: username
else useron
fi
和的输出
paul@paul-LC22UP:~$ .testlogin paul
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
is no logged in
testlogin
这里不是命令,而是的参数echo
。完整的命令是:
echo testlogin: username
echo
只需将您提供给STDOUT的文本吐出来。因此,冒号没有特殊含义,它是的逐字输出的一部分echo
。如果您使用错误的参数数量调用脚本,则输出为:
$ ./testlogin
testlogin: username
$ ./testlogin fred bill adam
testlogin: username
这是一个奇怪的输出,但不一定是错字。我通常会期望以下方面:
$ ./testlogin
Usage: testlogin username
整个脚本不起作用的原因是因为作者在调用该useron
函数时犯了一个细微的错误,并且可能在发布脚本之前未测试过他们的脚本(否则他们会注意到与您相同的错误)。$1
在useron
函数的第一个参数给函数,而不是整个脚本; 但由于useron
未使用任何参数调用,因此该字符串为空字符串,因此最终运行命令:
$ who | grep
这将提供grep
s的使用情况信息,然后始终触发else
条件的分支。您可以通过将第一个参数传递给脚本来解决此问题,useron
如下所示:
else useron $1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句