こんにちは、私は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 '
私のスクリプトの説明:
最初の行は、ディレクトリにファイルがいくつあるかを入力することです。
この行はファイルから入力を受け取ります。ファイルには何行がありますか?
数字を引くと、その値は整数になります。
次の行に使用する変数値を宣言します。
この行はファイルから入力を受け取り、ノード名を含む3番目の列を切り取ります。
も変数だ
IPアドレスをファイル入力として使用
if
状況
ループ構文のアイデアはありますかfor
?
答え1
何よりも、done
との間のforループを終了しません。この場合、中かっこを使用する必要はありません。}
fi
Bashの演算子には++
算術拡張が必要なので((lait++))
。
整数は比較されるため、$nagiosdir -eq $lbdir
文字列を使用するとエラーが発生します。
$ test hi -eq hi
-bash: test: hi: integer expression
代わりにこれを使用したいと思います$nagiosdir = $lbdir
。
他にも、これはスクリプトの構文エラーです。
答え2
for
ループを終了しますdone
。 (forループから対応する中括弧を削除できます。)
答え3
あなたのスクリプトはわかりませんが、スクリプトをデバッグしました。
#!/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" = "$lbdir" ] ; then
echo " Nothing to do "
else
if [ "$giosdir" <= "$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++;
done;
fi;
fi;