Articles

긱 일기

에 있는 많은 시간이 쉘 스크립트를 할 때 반복적으로 문을 실행하는 그룹이 될 때까지 문의 일부 지정된 조건이 발생합니다. 또한 특정 목록의 각 요소에 대한 명령문 그룹을 실행하고 싶을 수도 있습니다. 셸은 이러한 상황에 대해 for,while 및 whill 구조체의 세 가지 루핑 구조를 제공합니다.

for 루프를 사용하면 값 목록을 지정할 수 있습니다. 목록의 각 값에 대해 명령문 그룹이 실행됩니다.

for loop syntax

쉘의 for 루프는 단어(문자열)목록을 인수로 사용합니다. 목록의 단어 수에 따라 for 루프의 명령문이 실행되는 횟수가 결정됩니다. 에 대한 구문을 위한 루프가:

for variable in element1 element2 element3 do commands done

곳:

  • 가변:그것은 어떤 변수 이름을 지정합니다.
  • 소(argument_list):될 수 있는 어떤 목록의 단어,문자열,또는 숫자,그리고 그것이 수 있는 문자 또는 생성에 사용하는 쉘 명령 또는 쉘 명령행 메타 문자.
  • 명령: 명령될 수 있는 모든 운영-시스템 명령,사용자 프로그램,쉘 스크립트를,또는 쉘 구문을 반환하는(생산)목록.

변수 var 의 값은 루프를 통해 처음으로 목록의 첫 번째 단어로 설정됩니다. 루프를 통해 두 번째로,그 값은 목록의 두 번째 단어 등으로 설정됩니다. 루프는 var 가 인수 목록의 각 값을 차례로 가져 와서 나머지 인수가 없을 때 종료됩니다.

for 루프 인수 목록

a for 루프의 인수 목록은 단어,문자열 또는 숫자의 모든 목록이 될 수 있습니다. 성 인수 목록을 사용하여 다음과 같은 방법(또는 방법의 조합):

  • 사용하여 명시적 목록
  • 사용 변수의 내용이
  • 사용하는 명령줄 인수
  • 사용하여 명령을 대체
  • 사용하여 파일 이름에서 명령을 대체

예제 1: 을 위한 루프를 사용하여 명시적 목록을 지정하는 인수

경우 인수 표시를 위한 반복,그들은 그들이라고 명시적 목록입니다. 명시 적 목록은 인수 목록의 가장 간단한 형태입니다. 루프는 각 목록 요소에 대해 한 번 실행됩니다. 다음 예에 대한 루프를 사용하여 명시적 목록의 요소:

#!/bin/bashfor fruit in apple orange banana peach kiwi do echo "Value of fruit is: $fruit"done

출력의 이해 루프가:

Value of fruit is: apple Value of fruit is: orange Value of fruit is: banana Value of fruit is: peach Value of fruit is: kiwi

예제 2: 을 위한 루프를 사용하여 변수 내용을 지정하는 인수

경우 인수는 변수에 문을 실행하면 변수 내용으로 대체됩니다. 다음 예에서는 프롬프트에 입력된 텍스트가 변수 입력의 값이 됩니다. 이 변수는 for construct 의 인수 목록을 나타냅니다. 따라서 입력중인 텍스트는 공백에 따라 단어 또는 토큰으로 나뉩니다.

$ cat ex1.sh #!/bin/bash# Script name: ex1.shecho "Enter some text: \c" read INPUTfor var in $INPUT do echo "var contains: $var"done
$ ./ex1.shEnter some text: I like the Bash shell. var contains: Ivar contains: likevar contains: thevar contains: Kornvar contains: shell.

예 3:을 위한 루프를 사용하여 명령줄 인수를 인수를 지정하는

다음 예제에서는 텍스트 입력에서 명령 라인이된 인수의 목록을 위한 구조물이다. 따라서 명령 행 텍스트는 공백에 따라 단어 또는 토큰으로 나뉩니다.

$ cat ex2.sh#!/bin/bash# Script name: ex2.shfor var in $* do echo "command line contains: $var"done
$ ./ex2.sh I am The Geek.command line contains: Icommand line contains: amcommand line contains: Thecommand line contains: Geek.

실시예 4 : 을 위한 루프를 사용하여 명령을 대체 인수를 지정하는

구문에 명령에 대한 대체에서 Bash 쉘입니다:

for var in `cmd_sub`

는 다음과 같이 출력 고양이의 명령을 인수로 목록입니다.

$ cat fruit1 apple orange banana peachkiwi
$ cat ex4.sh #!/bin/bash# Script name: ex4.shfor var in `cat fruit2` do echo "var contains: $var"done
$ ./ex4.shvar contains: Apple var contains: Orange var contains: Banana var contains: Peach var contains: Kiwi

경우에는 목록이 포함된 파일에 다음과 같은 형식으로,무엇입의 결과를 위해 반복입니다.

$ cat fruit3Apple Orange Banana Peach Kiwi
$ cat ex5.sh #!/bin/bash# Script name: ex5.shfor var in `cat fruit3` do echo "$var"done
$ ./ex5.shApple Orange Banana Peach Kiwi

위의 예에서,결과는 변경되지 않습니다. IFS 변수는 모든 공백이므로 캐리지 리턴과 공간 또는 탭 모두 파일의 각 필드를 구분합니다.

예 5:을 위한 루프를 사용하여 파일 이름에서 명령을 대체 인수를 지정하는

어떤 명령이 제공하는 파일 이름이고 디렉토리의 이름으로 출력됩니다. 다음 예에서,셸을 대체 출력의 명령,ls/etc/p*(/etc/passwd/etc/profileand 등),인수로 목록에 대한 반복입니다.

$ cat ex7.sh #!/bin/bash# Script name: ex7.shfor var in `ls /etc/p*`do print "var contains: $var"done
# ./x.sh var contains: /etc/passwdvar contains: /etc/passwd-var contains: /etc/printcapvar contains: /etc/profile....