在 for 循环中使用 If in 语句

在 for 循环中使用 If in 语句

我在使用 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”。

相关内容