* nix中以“:”(冒号)结尾的含义是什么?

保罗

我目前正在关注位于以下位置的有关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函数时犯了一个细微的错误,并且可能在发布脚本之前未测试过他们的脚本(否则他们会注意到与您相同的错误)。$1useron函数的第一个参数给函数,而不是整个脚本; 但由于useron未使用任何参数调用,因此该字符串为空字符串,因此最终运行命令:

$ who | grep

这将提供greps的使用情况信息,然后始终触发else条件分支。您可以通过将第一个参数传递给脚本来解决此问题,useron如下所示:

else useron $1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章