Eso es porque no estás capturando el valor de retorno de dialog. Sabiendo que dialog devuelve 0 si se presiona "Yes" o "OK" y que devuelve 1 si se presiona Cancel, el valor de retorno es lo que deberías comprobar primero, y solamente en caso de que sea 0 comprobar el valor que se introdujo en el campo de texto. A continuación te dejo como creo que debería ser tu script:
Código BASH:
Ver original#!/bin/bash
usu=`dialog --stdout --title "Crear usuario:" --inputbox "Nombre del usuario a crear" 0 0`
if [ 0 -eq $? ]; then
if grep -q "^$usu:" /etc/passwd; then
clear
dialog --msgbox "El usuario $usu ya existe" 0 0
else
useradd -m $usu
clear
dialog --msgbox "Se creo el usuario $usu" 0 0
fi
else
clear
dialog --msgbox "Cancelado" 0 0
fi
Saludos.