Вы на правильном пути.
Но я думаю, что 2-й if [[ $# < 0 ]] .... fi
блок вас мало что даст. Ваш первый тестовый пример правильно определяет ситуацию: «Для этого сценария требуется 1 аргумент или выход».
Кроме того, я не вижу, для чего вам нужно имя, поэтому базовый тест -
case "${fullname:--1}" in
-[1] ) printf "No userID found for input=$1\n" ; exit 1 ;;
* )
# assume it is OK
# do what every you want after this case block
;;
esac
Вы можете, конечно, продублировать это с помощью "${firstname}"
, если вам действительно нужен чек.
ИЛИ как эквивалент, если ... fi равно
if [[ "${fullname}" == "" ]] ; then
printf "No userID found for input=$1\n" ; exit 1
fi
обратите внимание, чтобы быть более эффективным, вы можете разобрать $ {fullname}, чтобы получить имя без всех вызовов grep и т. Д., Т.е.
firstname=${fullname%% *}
Дайте мне знать, если вам нужно, чтобы я объяснил: - 1} и %% *} модификаторы переменных.
Надеюсь, это поможет.