8. 중괄호 { } 활용과 명령어 연속 입력

2022. 9. 19. 11:19Linux

중괄호를 사용하면 명령어를 입력할 때 반복적인 문장을  간결하게 처리할 수 있습니다.

 

중괄호는 점점(..)과 쉼표(,)를 조합해서 문장을 처리할 수 있습니다.

 

# echo A{1,2,3,4}B

결과

A1B A2B A3B A4B

 

# echo A{1..4}B

결과가 A{1,2,3,4}B 와 동일합니다.

A1B A2B A3B A4B

 

# echo {1},{2}

중괄호 안에 쉼표가 없다면 의미가 없습니다.

 

#echo {1,2},{3}

2 x 1 로 2번 반복하는 모습입니다.

 

#echo {1,2},{3,4}

2 x 2로 4번 반복하는 모습입니다.

 

#echo A{1,2},{3,4}B

위의 결과에 앞뒤로 A, B만 붙은 모습입니다.

 

# echo {A{1,2},{3,4}B}

A, B에 중괄호를 씌워 놓으니 사이에 있던 쉼표에 의해 각각 나타나는 모습입니다.

그리고 사이쉼표에 의해 앞 중괄호가 먼저 발동합니다.


구구단을 한번 만들어 보겠습니다.

 

# echo {1..9}x{1..9}

 

구구단 txt파일을 한번 만들어 보겠습니다.

# touch {1..9}x{1..9}.txt

 

삭제 역시 생성과 동일합니다.


이번에는 명령어를 한줄에 연속해서 입력할 수 있는 기능에 대해서 알아보겠습니다.

 

  1. ; 앞의 명령어가 실패해도 다음 명령어 실행
  2. $? 이전 명령어 성공여부 확인
  3. && 앞의 명령어가 성공했다면 다음 명령어 실행
  4. || 앞의 명령어가 성공했다면 다음 명령어 실행안함(&&와 반대)
  5. & 앞의 명령어 백그라운드로 돌리고 동시에 다음 명령어 실행
  6. {} 명령의 그룹핑

1. ; 은 명령어 성공여부에 상관없이 다음 명령어를 실행합니다.

 

실패한 경우먼저 보겠습니다.

# cd /test;echo run!

/test라는 디렉토리가 존재하지 않아서 cd /test는 실패하지만 run!이 실행됐습니다.

 

성공경우를 보겠습니다.

# mkdir /test; cd /test

순서대로 잘 실행돼서 현재 경로가 /test로 설정된 모습입니다.


2. $? 바로 전에 실행한 명령어가 성공했으면 0, 실패는 0 외의 숫자가 나타납니다.

 

# mkdir /test

# echo $?

# rmdir /test

# echo $?

/test 디렉토리가 존재하는데 또 /test 디렉을 만드려 하니 실패했습니다.

echo의 결과로 0이 아닌 1이 뜸으로써 실패한 것을 알 수 있습니다.

rmdir 명령어로 /test 디렉을 지우는데 성공했습니다.

echo의 결과로 0이 뜸으로써 성공한 것을 알 수 있습니다.


3. &&는 앞의 명령이 성공해야 뒤의 명령을 실행합니다.

 

# cd /test && echo success!

/test 디렉토리로 이동이 실패해서 success! 가 뜨지 않습니다.

# mkdir /test && echo success!

/test 디렉토리 생성이 성공해서 success!가 뜹니다.


4. || 는 앞의 명령이 성공했다면 다음 명령을 실행하지 않습니다. &&와 반대입니다.

 

# cd /test && echo success!

# mkdir /test && echo success!

&& 시나리오와 동일하지만 결과는 반대입니다.


5. &는 앞의 명령을 백그라운드로 돌리고 동시에 다음 명령어를 실행해줍니다.

 

# mkdir /test & cd /test

# cd /test

/test라는 집을 지으면서 집에 들어가 살 수 없기 때문에 cd 명령어는 실패한 모습입니다.

이어서 cd /test 명령어를 입력하면 집을 다 지은후이기 때문에 성공적으로 현재위치를 변경했습니다.


6. 이번엔 중괄호로{} 연속된 명령의 성공여부를 통합하는 실습을 해보겠습니다.

 

# mkdir /test && { cd /test ; echo success; } || echo fail

# mkdir /test && { cd /test ; echo success; } || echo fail

동일한 명령을 연속해서 실행했는데 echo 출력 결과가 다릅니다.

첫번째는 /test 디렉생성을 성공해서 이동 후 success를 출력하고 성공했으니 || 뒤의 내용은 실행하지 않습니다.

두번째는 /test 디렉생성을 실패해서 || 뒤의 내용은 실행하여 fail이 출력됐습니다.


끝!