Bash를 사용하여 정의된 콘텐츠로 번호가 매겨진 파일 만들기

Bash를 사용하여 정의된 콘텐츠로 번호가 매겨진 파일 만들기

4006에서 7075까지의 파일 이름을 가진 69개의 파일을 만들고 싶습니다. 각 파일에는 열거형 콘텐츠가 있어야 합니다. 다음 코드는 개별 파일에 삽입하려는 내용을 셸에 인쇄합니다. 그런데 어떻게 해야 합니까?

#!/bin/bash
for i in `seq 4006 4075`; do
      echo "vid $i\nports 524288\nactive = 1 >vlan_$i.ini"
done

따옴표 사이의 부분을 `(백틱)에 넣으려고 했지만 빈 파일만 표시됩니다.

답변1

echo명령의 출력을 리디렉션하려면 리디렉션 연산자를 >따옴표 밖에 두어야 합니다. 큰따옴표 사이의 문자는 >자신을 나타냅니다.

기본적으로 bash에서는 echo백슬래시 시퀀스가 ​​확장되지 않습니다. -e옵션을 에 전달하거나 echo, xpg_echo쉘 옵션을 설정하는 데 사용하거나 shopt, printf대신 사용해야 합니다 echo.

for i in `seq 4006 4075`; do
  printf "vid %s\nports %d\nactive = 1\n" "$i" 524288 1 >"vlan_$i.ini"
done

여기 문서여러 줄 문자열을 나타내는 더 읽기 쉬운 방법입니다. 명령줄 인수가 아닌 입력으로 전달되므로 cat대신 을 사용하십시오 echo. 텍스트가 들여쓰기되면 들여쓰기가 복사됩니다( <<-EOF들여쓰기를 피하기 위해 대신 사용할 수 있지만 <<EOF공백 대신 탭 들여쓰기만 가능).

for i in `seq 4006 4075`; do
  cat <<EOF >"vlan_$i.ini"
vid $i
ports 524288
active = 1
EOF
done

관련 정보