O erro específico que você está recebendo é porque seu script também está processando o cabeçalho do arquivo. Uma solução fácil seria pular as linhas que começam com #
:
#!/bin/bash
if [ ! -f "$1" ]; then
echo "No file found"
exit 1
fi
## Use grep -v to print lines that don't match the pattern given.
grep -v '^#' "$1" |
while read -r LINE || [ -n "$LINE" ]; do
name=$( echo "$LINE" | cut -d " " -f1,2)
age=$( echo "$LINE" | cut -d " " -f9)
echo "$name ----- $age"
if [ "$age" -gt 30 ]; then
echo "You got a discount"
fi
done
No entanto, como presumivelmente você também desejará fazer coisas com suas outras colunas, eu leria todas elas diretamente em variáveis:
#!/bin/bash
if [ ! -f "$1" ]; then
echo "No file found"
exit 1
fi
## read can take multiple values and splits the input line on whitespace
## automatically. Each field is assigned to one of the variables given.
## If there are more fields than variable names, the remaining fields
## are all assigned to the last variable.
grep -v '^#' "$1" | while read -r first last super powers weapons city enemy isout age; do
echo "$first $last ----- $age"
if [ "$age" -gt 30 ]; then
echo "You got a discount"
fi
done