testlogin
não é um comando aqui, mas um argumento para echo
. O comando completo é:
echo testlogin: username
echo
apenas mostra o texto que você deu a STDOUT. Portanto, o cólon não tem significado especial, é parte da saída textual de echo
. Esta é a saída se você chamar o script com o número incorreto de argumentos:
$ ./testlogin
testlogin: username
$ ./testlogin fred bill adam
testlogin: username
Esta é uma saída estranha, mas não necessariamente um erro de digitação. Eu normalmente esperaria algo mais ao longo das linhas:
$ ./testlogin
Usage: testlogin username
A razão pela qual todo o script não funciona é porque o autor cometeu um erro sutil ao chamar a função useron
, e presumivelmente não testou o script antes de publicá-lo (ou eles teriam notado o mesmo erro fez). $1
na função useron
é o primeiro argumento para essa função , não para o script inteiro; mas como useron
não foi chamado com nenhum argumento, essa é a string vazia e, portanto, acaba executando o comando:
$ who | grep
que fornecerá grep
s informações de uso e sempre acionará a ramificação else
da condição. Você pode corrigir isso passando o primeiro argumento para o script em useron
da seguinte forma:
else useron $1