Parece que você está tentando redirecionar a saída de home/dir/file.txt | awk '{print $2}' para o while loop;
primeiro, acho que o caminho correto deve ser /home/dir/file.txt (no entanto, isso é apenas uma suposição);
segundo /home/dir/file.txt | awk '{print $2}' não redireciona o conteúdo de /home/dir/file.txt para awk , enquanto < /home/dir/file.txt awk '{print $2}' faz;
terceiro, você está redirecionando a saída do comando como um arquivo, mas é uma string, e você deve redirecioná-la da seguinte forma: <<< "$(< /home/dir/file.txt awk '{print $2}')" .
Além disso, você pode enviar a saída do comando diretamente para o loop while : < /home/dir/file.txt awk '{print $2}' | while read num .
while read num
do
if [ "$num" = "0" ]; then
echo "Number is equal to zero"
else
echo "number is not equal to 0"
fi
done <<< "$(< /home/dir/file.txt awk '{print $2}')"
ou
< /home/dir/file.txt awk '{print $2}' | while read num
do
if [ "$num" = "0" ]; then
echo "Number is equal to zero"
else
echo "number is not equal to 0"
fi
done