Na verdade, isso pode ter sido respondido aqui: Canal condicional
Essa resposta pega o shell if/then/else mechanic e o usa para incorporar a lógica dentro do pipeline. Você pode fazer isso também com o operador && , mas não é tão limpo de ler, então prefiro if .
Basicamente, no seu caso, a linha tail seria assim (observe também a alteração de -z to -n ):
tail -n +"$HEAD" "$1" |
head -n $((TAIL-HEAD+1)) |
if [ -n "${NUMBER+x}" ]; then cat -n; else cat; fi
(isso pode ter alguns erros, eu não estou tão interessado em programação shell Linux. Mas você entendeu.)