그 동안 리눅스에서 반복 작업을 수행할 경우에는 컴퓨터를 2개 사용하더라도 R에서 해당 과정을 수행할 수 있는 스크립트를 작성하여 실행하였다. 이제는 그런 방법보다는 쉘 스크립트를 이용하는 것이 좋을 것 같아서 이번 기회에 배워 보기로 했다.
#! /bin/bash
file_list=`ls ~/work/*.svs`
for file in $file_list; do
file=`basename $file .svs`
~/bftools/bfconvert ${file}.svs converted/${file}_converted_%x_%y.tif
done
첫 줄에는 #! /bin/bash.
두 번째 줄부터 내용이다. 변수 사용에 있어 따옴표 종류가 중요하다. 작은 따옴표는 내부에 묶인 것이 글자 그대로 인식해야 할 때 사용한다. 큰 따옴표는 변수를 사용해야 할 때에 이용하면 된다. 벡틱이라고 불리는 1왼쪽에 있는 기호는 터미널에서 명령어를 실행하고 결과를 받아올 때 이용한다. 그리고 확실하지 않은데 변수 받을 때 띄어쓰기 않으며, 변수명에 .을 넣지는 않는다. 따라서 2번째 줄의 등호 오른쪽은 벡틱을 이용했다.
스크립트를 사용하는 주된 이유는 반복 실행과 관련된 것이다. for [ ] in { }은 R과 문법 자체는 동일하다. 따라서 어렵지 않다. { } 쪽에 변수 를 받아서 사용할 것이기 때문에 $를 붙여준다. 그리고 실행할 때에는 do를 붙여주면 된다. 아랫줄에 넣어도 되고, 새미콜론으로 오른쪽에 넣어줄 수도 있다.
4번째 줄에서 basename은 파일 경로에서 파일 이름만 이용할 때 사용하는 것이다. 나는 확장자를 제외한 파일 이름이 필요하기 때문에 추가 옵션을 이용한다. 한 칸 띄우고 .svs 를 붙이면 해당 단어는 빼고 결과를 출력한 다. 상세 사용은 basename –help를 참고하면 된다.
5번째 줄에서 변수를 이용하여 명령어를 실행할 경우 ${변수} 요런 식으로 이용하는 것 같다.
마지막에 6번째 줄에 done을 입력한다.
들여쓰기가 있는데, 보기 편하라고 한 것이지 실행에 영향을 주는 것은 아니다.