Shell: 조건에 2개의 변수를 사용하는 방법

Shell: 조건에 2개의 변수를 사용하는 방법

for 조건에 2개의 변수를 사용해야 합니다. 예를 들어,

cat days
01072017
02072017
03072017

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

내 쉘 스크립트 예

 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

이 한 줄 명령을 사용하여 다중 루프를 실행할 수 있습니다. 예를 들어 다른 서비스 매개변수를 사용하여 다른 호스트에서 서비스를 다시 시작해야 합니다. "나"호스트 ID 및"제이"서비스 이름 매개변수의 경우

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

노트:너는 변해야 해"나"그리고"제이"값이 요구 사항과 일치합니다.

관련 정보