エコーを使用してテキストを追加してもファイルが空でない場合は、新しい行から始めます。

エコーを使用してテキストを追加してもファイルが空でない場合は、新しい行から始めます。

次のスクリプトを作成しようとしています。

echo "#!/bin/sh" >/script
echo "del x.txt" >>/script

/scriptファイルが空の場合は魔女が実行し、それ以外の場合は最後のテキストに最初の行を追加します。

#!/bin/sh
del x.txt#!/bin/sh
del x.txt

エコ空行を最初に追加すると、ファイルが空でない限り再び問題ありませんが、空の場合はスクリプトは実行されません。

echo "" >>/script
echo "#!/bin/sh" >>/script
echo "del x.txt" >>/script

編集する:

私がやりたいことを正確に説明します。私のasuswrtルータでポート転送スクリプトに新しいルールを追加したいと思っており、ファイアウォールが有効になっています。

echo "#!/bin/sh" >/jffs/scripts/firewall-start
echo "" >>/jffs/scripts/firewall-start
echo "iptables -I INPUT -p tcp --destination-port 3000 -j ACCEPT" >>/jffs/scripts/firewall-start

これにより、/jffs/scripts/firewall-startのすべてのテキストが上書きされます。

スクリプトを最初から新しく作成するか、この行を追加しますが、最後の行にテキストを追加するのではなく、新しい行から始まるソリューションが必要です。空白行で始まり、スクリプトが空の場合、#!/bin/sh は最初の行にある必要があるため実行されません。

echo "" >>/jffs/scripts/firewall-start
echo "#!/bin/sh" >/jffs/scripts/firewall-start
echo "" >>/jffs/scripts/firewall-start
echo "iptables -I INPUT -p tcp --destination-port 3000 -j ACCEPT"

/jffs/scripts/ファイアウォール-開始

ベストアンサー1

Unixを使用してファイルが空であるかどうかをテストできますtest -s。以下の例...

 if [ -s $file ]
then
   echo "File size is zero"
else
   echo "File size is not zero"
fi

おすすめ記事