ステータス情報やその他のさまざまなテキストで埋められたtxtファイルの特定の部分を削除するスクリプトを作成しようとしています。主なif文を終了できません。さらに、output.txtを生成するスクリプトにdateコマンドを入れて、最も古い状態情報を削除しようとしました。最も古い情報を削除する方法はありますか?私は主にif文を終了したいと思います。ありがとうございます。 (また、もともとelse ifをelifとして使用しましたが、結果は同じでした。)
./count.sh: 行 30:else'
./count.sh: line 30:
予期しない表示の近くで構文エラーが発生しました。
WCOUNT=$(wc -l output.txt $1 | awk '{print $1}')
if [[ $WCOUNT -gt 50 ]]; then
if [[ "grep CLIENTSTART output.txt" != null ]]; then
echo $WCOUNT
sed -i '/\*\*\*CLIENTSTART/,/CLIENTEND\*\*\*/ d' output.txt
echo $WCOUNT
else if [[ -n "grep DHCPSTART output.txt" ]]; then
echo $WCOUNT
sed -i '/\*\*\*DHCPSTART/,/DHCPEND\*\*\*/ d' output.txt
echo $WCOUNT
else if [[ -n "grep DNSSTART output.txt" ]]; then
echo $WCOUNT
sed -i '/\*\*\*DNSSTART/,/DNSEND\*\*\*/ d' output.txt
echo $WCOUNT
else if [[ -n "grep WEBSTART output.txt" ]]; then
echo $WCOUNT
sed -i '/\*\*\*WEBSTART/,/WEBEND\*\*\*/ d' output.txt
echo $WCOUNT
else
echo "Cannot help you"
fi
else
echo "You're good, homie. It's under 500"
fi
ベストアンサー1
ここでの問題は、else if
代わりにを使用すると、elif
プログラムに入れ子が追加され、追加のfi
条件文を終了するためにさらにステートメントを追加する必要があることです。
以下は、私が何を意味するのかを示すために少し異なるインデントを含むプログラムの編集版です。
WCOUNT=$(wc -l output.txt $1 | awk '{print $1}')
if [[ $WCOUNT -gt 50 ]]; then
if [[ "grep CLIENTSTART output.txt" != null ]]; then
echo $WCOUNT
sed -i '/\*\*\*CLIENTSTART/,/CLIENTEND\*\*\*/ d' output.txt
echo $WCOUNT
else
if [[ -n "grep DHCPSTART output.txt" ]]; then
echo $WCOUNT
sed -i '/\*\*\*DHCPSTART/,/DHCPEND\*\*\*/ d' output.txt
echo $WCOUNT
else
if [[ -n "grep DNSSTART output.txt" ]]; then
echo $WCOUNT
sed -i '/\*\*\*DNSSTART/,/DNSEND\*\*\*/ d' output.txt
echo $WCOUNT
else
if [[ -n "grep WEBSTART output.txt" ]]; then
echo $WCOUNT
sed -i '/\*\*\*WEBSTART/,/WEBEND\*\*\*/ d' output.txt
echo $WCOUNT
else
echo "Cannot help you"
fi
fi
fi
fi
else
echo "You're good, homie. It's under 500"
fi
または、次のものを使用できます。elif
WCOUNT=$(wc -l output.txt $1 | awk '{print $1}')
if [[ $WCOUNT -gt 50 ]]; then
if [[ "grep CLIENTSTART output.txt" != null ]]; then
echo $WCOUNT
sed -i '/\*\*\*CLIENTSTART/,/CLIENTEND\*\*\*/ d' output.txt
echo $WCOUNT
elif [[ -n "grep DHCPSTART output.txt" ]]; then
echo $WCOUNT
sed -i '/\*\*\*DHCPSTART/,/DHCPEND\*\*\*/ d' output.txt
echo $WCOUNT
elif [[ -n "grep DNSSTART output.txt" ]]; then
echo $WCOUNT
sed -i '/\*\*\*DNSSTART/,/DNSEND\*\*\*/ d' output.txt
echo $WCOUNT
elif [[ -n "grep WEBSTART output.txt" ]]; then
echo $WCOUNT
sed -i '/\*\*\*WEBSTART/,/WEBEND\*\*\*/ d' output.txt
echo $WCOUNT
else
echo "Cannot help you"
fi
else
echo "You're good, homie. It's under 500"
fi
(また、少しトリッキーに言えば、50行以上の行があるかどうかを確認していますが、出力メッセージには500行をチェックすると言われています。技術的には500行未満の行がありますが、これは少し誤解を招く可能性があります。p)
編集:他の人が指摘したように、これは構文エラーを解決しますが、スクリプトにはまだ他の問題があります。私も彼らのコメント/回答を読むことをお勧めします。