Debianシステムで次のコードを実行しています。
for File in "${Files[@]}"; do
if test "`find $FolderDownload/$File -cmin -190`" ; then
echo "File is new then 3 hours"
# Set concatenation
FileConcat=1
# Get out ot next step
break
else
echo "There's no change in the $File in past 6 hours"
fi
done
FreeBSDシステムでネイティブcshで使用する方法は?
実際に私は努力しています:
foreach File ($Files)
if (test find $FolderDownload/$File -cmin -190) then
echo "File is new then 3 hours"
# Set concatenation
FileConcat=1
# Get out ot next step
break
else
echo "There's no change in the $File in past 6 hours"
endif
end
しかし、エラーが返されます。
if: Expression Syntax.
変数の内容は次のとおりです。
ファイル = {"File1.txt","File2.txt","File3.txt","File4.txt"}
フォルダをダウンロード="/var/scripts/"
ファイル接続 = 0
答え1
お客様は、お客様のコメントに次のことを知っているとマークしました。
- バッシュをインストールする方法。
- ルートのデフォルトシェルを変更しないでください。
- Bashは/ binにインストールされていないため、シングルユーザーモードでは直接使用できません。
- のユーザーです。
上記のすべては正確で、あなたに良いです!
小さな誤解、重要ではありません。 toorユーザーはこの目的のために作成されました。 uidは0(ルートと同じ)なので、必要なシェルを設定できます。トル。
より大きな誤解は、ほとんどのFreeBSDスクリプトが(t)cshを使用して作成されることです。彼らはそうではありません!システムスクリプトはshで書かれています。見て/bin/freebsd-version
ください。/usr/bin/zdiff
BashはFreeBSDオペレーティングシステムの一部ではありません。ただし、インストールして使用するとシステムが不純になりません。ユーザーシェルを変更する必要さえありません。しかし、もしそうなら、根に手を触れないでください。
しかし、より大きな問題があります。
cshにスクリプトを書かないでください!
デフォルトのルートシェルが(t)cshであっても、どのシステムでもcshスクリプトを作成しないでください。これはかなり一般的な合意です。完全な内容を見るには、以下を読んでください。有害とみなされるCSHプログラミング
シェルボーン
スクリプトを作成するたびに、最初の行は「shebang」で始まる必要があります(詳細はバッシュシェボン)。これにより、スクリプトの実行時に使用するインタプリタがシステムに通知されます。 cshでbash(またはperl / zsh / etc)スクリプトを問題なく実行できます。
最適な移植性のために、以下を実行します。
#!/usr/bin/env bash
$ PATHでbashの場所を見つけます。私にとっては、これが最高のソリューションです。
他の人は絶対にこのようにしてはならず、代わりに正確な位置を指定しなければならないと主張します。その後、ターゲットシステムに要件が追加されます。 shebang shen moveスクリプトを更新するか、ターゲットシステムの/ binにbashへのリンクがあることを確認してください。
幅広い移植性のためのshの使用
より良い移植性が必要な場合は、スクリプトにshシェルを使用してください。 bashよりも機能が少ないですが、すべてのPOSIX(類似)システムで動作すると確信できます。
シェルスクリプトは難しい!
正しいシェルスクリプトを書くのは非常に難しいかもしれません。あなたを助けることができる最初で最高のツールは次のとおりです。住宅検査。あなたはそれをインストールすることができます地元のしかも。
スクリプトを確認する習慣を持ちます。これにより、多くの問題を軽減できます。