O que você escreveu nesta linha:
tempFile='cut -c1 $1'
não cria um arquivo chamado tempFile
. Portanto, você não pode ler a partir dele.
Você pode alterar essa linha para:
cut -c1 "$1" > tempFile
E um arquivo chamado tempFile
será criado para o loop while read
ler. Não use $tempFile
nesse loop, pois a variável $tempfile
é nula (não existe). Use algo como (no $):
done < tempFile
No entanto, o comando simples cut -c1 "$1"
irá escrever todos os primeiros caracteres do arquivo de origem, apenas execute isto para ver:
cut -c1 "sourcefile"
Sabendo disso, você não precisa de um tempFile para manter os valores, apenas use um documento aqui.
Usando um documento aqui e limpando alguns outros problemas no seu script:
#!/bin/sh
echo "This is a script that analyses student data from input file $1"
echo "----------------------------------------------------------------------"
studentCount="$(wc -l < "$1" )"
while read n
do
echo "$n"
done <<-_avoid_a_file_
$(cut -c1 "$1")
_avoid_a_file_
echo "$studentCount is the number of students in the input file."
É uma boa prática usar um she-bang (#!) para indicar qual interpretador deve executar o código. Nesse caso, presumi que você queria sh
devido à menção de Bourne shell
. Observe que o shell Bourne original é bem antigo (~ 1979) e que muitas melhorias foram adicionadas a shells mais recentes (ksh, bash, mksh, zsh, etc).