지겨우니까 바로 사용가능한 -----> 'for' loop

9 views
Skip to first unread message

Kevin Kangik Cho

unread,
Dec 8, 2012, 6:50:35 PM12/8/12
to linux-f...@googlegroups.com
2012년 12월 08일 일기 

아침에 추워죽겠는데 룸메이트 Kevin이 히팅을 껐다.
윗방 Julie는 새벽 여섯시부터 아침을 만든다고 시끄럽다.
12시에 만나기로한 James는 12시 20분이 되어서야 약속장소에 나왔다.
아 짜잉나네...
싸잡아서 한마디씩 해줘야겠다.

for people in {Kevin,Julie,James}
do
echo I will kill you, ${people}.
done
(echo 명령어는 뒤에 따라오는 input을 화면에 print해준다)
이렇게 치면...

이렇게 print 해준다
I will kill you, Kevin.
I will kill you, Julie.
I will kill you, James.



for loop
{ }로 둘러쌓인 리스트 안에 있는 인자들을
하나하나 밖으로 빼어서

위의 예제에선
people로 
이름을 정해준 뒤
loop을 돌린다.

do 라는 명령어로 loop의 시작을 알려주고
done이라는 명령어로 loop의 끝을 알려준다.



loop 안에서는 정해준 이름앞과 뒤에
${ } 사인을 붙여서 인자라는 것을 알려준다.
people 말고도 원하는 이름으로 바꿀 수 있다. eg. i j a b c anything



subject의 숫자가 많고, 살펴봐야 할 파일들이 많을 때
for loop 하나만 알아도
훨씬 빨리 진행 할 수 있음.

다른 examples.
001에서부터 100까지의 폴더가 있고,
그 안에 diffusion data가 각 폴더에 'diff' 라는 폴더 안에 들어있다.
이 때 001에서부터 009까지 diff 안에 있는 파일들을 보고싶을 때 !

for i in {001,002,003,004,005,006,007,008,009}
do
echo seeing inside $
{i}
ls $
{i}/diff
echo
done




subj이라는 폴더들 중 subj 1, 12, 23, 34, 45만 골라서
diff폴더 안에 있는 그들의 subject number로 시작하는 dti file의 intensity range를 보고싶을 때
for i in {subj1,subj12,subj23,subj34,subj45}
do
fslstats $
{i}/diff/${i}_dti.nii.gz -R
done




loop를 겹쳐쓰는 것도 가능.
subj폴더들 중 1에서 4까지
diffusion data와 structure data를 가지고 있는 'diff' 폴더 그리고 'str'폴더 안에 있는
모든 nifty image들의 intensity range를 보는법

for i in {subj1,subj2,subj3,subj4}
do
for j in {diff,str}
do
fslstats $
{i}/${j}/*.nii.gz -R
done
done







Will return to basics in next post :o
Have a good day.





for previous posts,
https://groups.google.com/forum/?hl=en&fromgroups=#!forum/linux-for-ccnc 


Reply all
Reply to author
Forward
0 new messages