私のスクリプトがループを終了するのはなぜですか?

私のスクリプトがループを終了するのはなぜですか?

私のスクリプトが最初の行の後にループを出る理由を理解できません。 deleteUser関数内で別のスクリプトを呼び出しているため、動作が中断されるようです。

以下は私のスクリプトから抜粋したものです。

[...]

function deleteUser
{
  nfsserver="/local/scripts/find_home_in_nfs.sh ${1}"
  ssh -n $nfsserver "rm -rf /home/${1}"
  ssh ldap "sudo deleteUser ${1}"
  userHome ${1}
}

cat myFile | while read line
do
  username=`echo ${line} | awk -F" " '{print $1}'`
  action=`echo ${line} | awk -F" " '{print $2}'`

  if [ "${action}" == "d" ]; then
     deleteUser ${username}
  elif [ "${action}" == "a" ]; then
     addUser ${username}
  fi
done

"find_home_in_nfs.sh"(ホームの場所を見つけるためにすべてのNFSサーバーへの多くのSSH接続を実行します)を呼び出さずにスクリプトの単純化されたバージョンを再構築してみましたが、うまくいきました。

ただし、使用する必要がありますが変更できません。 whileループを操作する方法はありますか?

ベストアンサー1

次の例のように、ループを大幅に簡素化できます。

while read username action
do
   if [ "${action}" == "d" ]; then
      echo "deleteUser ${username}"
   elif [ "${action}" == "a" ]; then
      echo "addUser ${username}"
   fi
done < myFile

おすすめ記事