Shell:如何在 for 条件中使用 2 个变量

Shell:如何在 for 条件中使用 2 个变量

我需要在 for 条件中使用 2 个变量。例如,

cat days
01072017
02072017
03072017

cat hours
00:00
01:00
02:00
03:00

我的 shell 脚本示例

 for i in `cat days` & j in `cat hours`
    do
    cat file | grep $i $j >data-$i-$j
    done

我想要 3 天 * 4 小时 = 12 个文件的输出,并使用相应的数据-日-小时进行重定向

答案1

此类问题的标准解决方案是创建两个循环:

for i in $(<days); do
     for j in $(<hours); do
           grep "$i $j" file > data-"$i-$j"
     done
done

请注意,我将反引号更改为$()命令替换,消除了死猫,并添加了双引号。

答案2

您需要使用嵌套的 for 循环

   for i in `cat days` 
      do 
        for j in `cat hours`
        do
        cat file | grep  "$i $j"  >data-${i}-${j}
      done
    done

答案3

您可以使用这个单行命令来运行 multiloop ,例如您必须在具有不同服务参数的不同主机上重新启动服务 “我”用于主机 ID 和“j”用于服务名称参数

for i in 1 2 3 4;do  ssh host$i 'for j in A B C D; do sudo systemctl restart service_$j; done'; done

笔记:你必须改变“我”“j”值符合您的要求

相关内容