Usando o bash você pode usar uma expressão regular para validar o número:
#! /bin/bash
while [ -z "$REPLY" ]; do
read -p "Enter a valid number: "
if ! [[ "$REPLY" =~ ^[0-9]+$ ]] ; then
echo Bad number: $REPLY
REPLY=
fi
done
echo A valid number: $REPLY
O programa continua lendo a entrada até a variável $REPLY
ser definida por read
. Quando o número é comparado com ^[0-9]+$
, o loop é finalizado.