입력을 받아야 하는 문제는 꽤 많이 보입니다. shell에서는 read를 쓸 수 있는데요. 어떻게 해야 하는지 간단하게 알아봅시다.

 


 

 먼저, read a는 1줄을 읽어서, 변수 a에 저장합니다. echo $a는, a에 저장된 값을 출력하는 것인데요. 이 쉘 프로그램은, 한 줄을 입력받아서 a에 저장한 뒤에, a의 값을 출력하는 것입니다.

 

 실행해 보겠습니다. 저는 2 4 6 8을 입력했습니다. 입력한 값이 2 4 6 8이였으므로, 출력은 2 4 6 8이 됩니다. 그런데, 공백을 기준으로 받아야 할 경우도 있습니다. 이 때에는 문서에 나온 IFS를 이용하면 됩니다. 한 마디로 spliter의 역할을 한다고 보시면 됩니다. result를 split 하는데, IFS를 " "로 주면, 공백 문자를 기준으로 split 해 버립니다. read의 결과가 "1 3"이였는데 공백을 기준으로 스플릿 되었다면 "1", "3"이 분리될 겁니다. 

 

 

 공백을 기준으로 split를 합니다. 그리고 a와 b를 읽습니다. echo $a, echo $b가 나왔습니다. 이는 a와 b의 값을 출력하라는 의미입니다.

 

 2 4가 입력되었습니다. 공백을 구분자로 하라 했으므로, 2가 a에, 4가 b에 들어갈 겁니다. 따라서, 2, 4가 순서대로 한 줄에 하나씩 출력됩니다.

 


 이제 파일로부터 읽어내는 예제를 보겠습니다.

 

 test.txt에는 3 5가 저장되어 있습니다. 저는 파일로부터 읽어내려고 합니다. 어떻게 하면 될까요? stdin 대신에 파일로부터 입력을 받는 것이므로, redirect를 쓰면 됩니다.

 

 

 그러면 쉘 파일은 위와 같이 입력하면 됩니다. < test.txt는, test.txt를 입력으로 리다이렉션 시킨다는 의미입니다.

 

 그러면, 3과 5가 순서대로 출력됩니다.

 

 test.txt에 3개의 줄이 있습니다. 그리고 각 줄에는 수 공백 수 형태의 데이터가 들어가 있습니다. 이런 경우에는 어떻게 해야 할까요?

 

 while loop로 입력이 끝날 때 까지 돌려버리면 됩니다.

 

 3, 5, 2, 4, 1, 3 순으로 출력되는 걸로 보아, 제대로 읽어냈음을 알 수 있습니다.