我需要在 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”值符合您的要求