A linha
test -z $LOGNAME || echo Logname is not defined
é uma lista OR e pode ser traduzida como:
DO echo Logname is not defined SE test -z $LOGNAME FALHA
Como você mencionou na sua pergunta, test -z $LOGNAME testa se $LOGNAME é tamanho zero ... e, como não é, o teste falha. Substituir || por && da seguinte maneira fornecerá o comportamento desejado:
test -z $LOGNAME && echo Logname is not defined
EDITAR : Conforme o comentário de William Pursell abaixo, test -n (teste para uma string de tamanho diferente de zero) e || podem fazer mais sentido conceitual, mas é necessário citar $LOGNAME neste caso (e, de fato, é uma boa idéia adquirir o hábito de citar variáveis em geral):
test -n "$LOGNAME" || echo Logname is not defined