次のスクリプトを作成しようとしています。
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