Assumindo que o trecho de código faz parte de um prompt de linha de comando / script bash. Um loop for tem a forma geral como.
for arg in [list]
do
command(s)...
done
Não tendo a parte done
do loop for
resulta.
syntax error: unexpected end of file
Ainda mais nomes de variáveis devem ser consistentes. file
e filename
parecem ser usados de forma intercambiável. É aconselhável citar variáveis para evitar o spiting de palavras. A variável $filename
usada na terceira linha do snippet de código é não inicializada, isto é, vazia. Isso resulta em head -3 ''
sendo executado fornecendo os resultados head: cannot open '' for reading: No such file or directory
no mínimo 10k vezes.
Além disso, cat $filename | head -3 $filename
é adicionado de forma redundante à carga de trabalho para fins aparentemente inúteis.
Corrigindo todos esses problemas, produzimos.
for file in *;do
if [[ -f "$file" ]];then
rid="$(head -3 "$file" | awk '{print $3}')"
echo "$rid"
else
echo "$file" " not found"
fi
done
ou como um forro
for file in *;do if [[ -f "$file" ]];then rid="$(head -3 "$file" | awk '{print $3}')"; echo "$rid"; else echo "$file" " not found"; fi;done
O programa shellcheck
é bastante útil para encontrar essas pegadinhas antes de executar o código. O Shellcheck está disponível no repositório do universo.
Para ler mais, consulte o Guia Avançado de Roteiro de Bash de Mendel Cooper