forループでIfステートメントを使用する

forループでIfステートメントを使用する

スクリプトを実行するための条件としてifステートメントを使用するのに問題があります。

添付データを含む承認済みファイルのリストと比較して、ディレクトリ内のすべてのファイルを確認するforループがあります。

for ( y in `ls directory` ) 
do
if [[ y =~ $(awk -F',' '{ print $1 }) ]]
then
ydata=grep $y file

sh $ydata
fi
done

forループはディレクトリ内の各ファイルを実行するものであり、正常に動作します。

if は与えられたファイルがリストにあるかどうかをチェックします。 y結果のほんの一部が承認され、スクリプトで使用されることが予想されるため、失敗する可能性がある条件が必要です。 [[これは私には合わない]]

最後に、スクリプトを実行するために行全体をパラメータとして要求するファイル(ファイル名、日付、リスク、レベルなど)から行全体を抽出するgrepがあります。ただし、ファイルがリストにない場合はスクリプトを実行したくなく、可能であればディレクトリ内のすべての項目をgrepしたくはありません。

どんなアイデアがありますか?

答え1

@Gray_M 何が必要なのかわかりません。質問に詳細を提供するか、処理するデータサンプルを投稿することもできます。

私が理解していないものは次のとおりです。

  • データを含む承認済み文書のリスト(添付ファイル?説明してください)
  • ディレクトリ内のすべてのファイルを実行します。(ファイルはスクリプトという意味ですか?)それとも各ファイルを処理することを意味しますか?
  • 結果のごく一部のみが承認され、スクリプトに使用されることが予想されます。(どのスクリプトで使用されますか?) 新しいスクリプトですか?スクリプトを実行しますか?呼び出しスクリプト?呼び出しスクリプトはどのように生成されますか?データはスクリプトですか?データと例を投稿できますか?
  • $(awk -F',' '{ $1 印刷 })完全に間違っています。欠落している引用符に加えて、データは受信されませんでした。これは、awkが処理するものがないことを意味します。

    とにかく、まず以下の簡単なスクリプトが役に立ちます。

 #!/bin/bash
scripts_folder="scripts_to_check_folder"
conditions_file="conditions_file"
for file in $(ls "$scripts_folder"); do
    if grep -F "$file" $conditions_file; then
        sh "$scripts_folder/$file"
    else
        echo "Will not execute this script: $file"
    fi
done

ループは、内容に応じて一部のスクリプトを実行または実行しません。条件ファイルデフォルトではスクリプト名が含まれます。

さらなるサポートを提供するために、詳細をもう一度提供してください。

答え2

あなたの質問(私が注意深く読んだ場合)はif文に関するものです。条件は興味深い内容を提供しません。まず、「y」は「&y」でなければなりません。

関連情報