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