「if...else」条件を持つ「for」ループでエラーが発生しました。

「if...else」条件を持つ「for」ループでエラーが発生しました。

こんにちは、私はbashスクリプトを書くのが初めてです。

やるべきことがあります。ノード名とIPアドレスが更新されたファイルがあり、目的のディレクトリにないノードのすべてのファイルと、更新されたファイル内のノードのすべてのファイルを作成して名前を編集する必要があります。

最後の行から上に入力を下から上に提供する必要があり、私のスクリプトは必要に応じて下から上に実行され、目的のディレクトリに欠落している項目を意味します。

私はelse条件を使用し、それが等しくなるまで私のタスクを実行するためにforループを置く必要があります。私のスクリプトは

!/bin/bash

set -x

giosdir=$(find /usr/local/example-dir -maxdepth 1 -type f | wc -l)

lbdir=$(more /root/scripts/servers/new/example.txt |wc -l)

count=$(($lbdir-$giosdir))

lait2=1

l2=$(awk '{print $3}' < /root/scripts/servers/new/example.txt | tail -$lait2)

lait=1

newip=$(awk '{print $1}' < /root/scripts/servers/new/example.txt | tail -$lait)

if [ $nagiosdir -eq $lbdir ] ; then

echo " Nothing to do "

else

  if [ $giosdir -lt $lbdir ] ; then


   for((i=0;i<count;i++));do

    {


  cd /usr/local/

  cp example-Node-2.txt   $l2.txt

  sed -i 's/10.10.0.1/'$newip'/' $l2.txt

  sed -i 's/examole-Node-2.txt/'$l2'/' $l2.txt

  echo " Node is added successfull"

  lait2++;
   lait++;           

     }

  fi
fi

しかし、このエラーが発生しました。

行43:トークンfiの近くに予期しない構文エラーがあります。 43行目:fi '

私のスクリプトの説明:

  1. 最初の行は、ディレクトリにファイルがいくつあるかを入力することです。

  2. この行はファイルから入力を受け取ります。ファイルには何行がありますか?

  3. 数字を引くと、その値は整数になります。

  4. 次の行に使用する変数値を宣言します。

  5. この行はファイルから入力を受け取り、ノード名を含む3番目の列を切り取ります。

  6. も変数だ

  7. IPアドレスをファイル入力として使用

  8. if状況

ループ構文のアイデアはありますかfor

ベストアンサー1

何よりも、doneとの間のforループを終了しません。この場合、中かっこを使用する必要はありません。}fi

Bashの演算子には++算術拡張が必要な​​ので((lait++))

整数は比較されるため、$nagiosdir -eq $lbdir文字列を使用するとエラーが発生します。

$ test hi -eq hi
-bash: test: hi: integer expression

代わりにこれを使用したいと思います$nagiosdir = $lbdir

他にも、これはスクリプトの構文エラーです。

おすすめ記事