予期しないトークンfi'に近い構文エラーが原因でエラーが発生しました。

予期しないトークンfi'に近い構文エラーが原因でエラーが発生しました。
#/bin/sh
file="C:/khushal/prop.txt"
if [ -f "$file" ]
then
    echo "$file found."
 while IFS= read -r key value
  do
    key=$(echo $key | tr '.' '_')
    eval ${key}=\${value}
     echo "User Id       = " ${db_uat_user}
      echo "user password = " ${db_uat_passwd}
 else
     echo "$file not found."
fi 

答え1

doneドアに一致するトークンはありませんwhile ... do

通常、ファイルテストを逆にしてスクリプトを短絡するのが最善です。これにより、 if .. then .. else があまりにも多くの行にまたがるのを防ぎます。つまり:

#/bin/sh
file="C:/khushal/prop.txt"
if ! [ -f "$file" ]
then
    echo "$file not found."
    exit 1
fi
echo "$file found."
while IFS= read -r key value
do
   key=$(echo $key | tr '.' '_')
   eval ${key}=\${value}
   echo "User Id       = " ${db_uat_user}
   echo "user password = " ${db_uat_passwd}
done

関連情報