Você pode usar qualquer um dos itens a seguir para executar comandos quando $1
estiver vazio:
[[ ! $1 ]] && { COMMANDS; }
[[ $1 ]] || { COMMANDS; }
[[ -z $1 ]] && { COMMANDS; }
[[ -n $1 ]] || { COMMANDS; }
Além disso, você não precisa citar a expansão neste exemplo em particular, pois nenhuma divisão de palavras é realizada.
Se você quiser verificar se há argumentos, é melhor usar (( $# ))
.
Se eu entendi suas intenções, aqui está como seu código poderia ser escrito com getopts
:
#!/bin/bash
(( $# )) || printf '%s\n' 'No arguments'
while getopts ':n:h' opt; do
case "$opt" in
n)
[[ $OPTARG ]] && printf '%s\n' "Commands were run, option $OPTARG, so let's do what that says."
[[ ! $OPTARG ]] && printf '%s\n' "Commands were run, there was no option, so let's run some stuff."
;;
h) printf '%s\n' 'Help printed' ;;
*) printf '%s\n' "I don't know what that argument is!" ;;
esac
done