컴퓨터 세상/LiNuX

셸 사용법 - 출력 명령, 특수 문자 사용

Jimin Daddy 2022. 1. 25. 12:51

* 배시셸의 출력 명령은 echo 와 printf가 있다. 출력 명령은 문자열 출력이나 셸 변수 값 출력, 명령 결과 출력 등에 사용

* echo 명령은 모든 셸에서 공통적으로 제공하는 출력 명령임.
   - echo : 화면에 한 줄의 문자열을 출력한다.
     형식 : echo [-n][문자열]
     옵션 : -n -> 마지막에 줄 바꿈을 하지 않는다.
     사용 예 : echo,      echo text,      echo -n text

* printf 명령은 C 언어의 출력 함수인 printf 처럼 % 지시자와 \ 문자를 이용하여 출력 형식을 지정.
   - 기능 : 자료를 형식화하여 화면에 출력
     형식 : printf [형식][인수]
     옵션 : 형식 - %d, \n 등 C 언어의 printf 함수의 형식을 지정 (%d 는 정수 출력, \n 는 줄 바꿈)
     사용 예 : printf text,      printf "text\n",      printf "%d\n" 100
     printf 하고 따옴표 없이 글자를 적을 경우 한 단어만 출력함.
     ex) printf text number 일 경우 text만 출력함.
           printf "text number" 일 경우 text number를 출력함.

* 특수 문자 사용
  셸은 사용자가 더욱 편리하게 명령을 입력하고 실행할 수 있도록 다양한 특수문자를 제공.
  주요 특수문자는 *, ? , | , ; , [], ~, ', "", `` 등이 있다. 사용자가 명령을 입력하면 셸은 먼저 입력한 내용 중에 특수문자가 있는지 확인하고 이를 해독하여 적절한 형태로 변경한 후 명령을 실행한다.

 - 특수 문자 *
   0개 이상의 문자로 대체 된다. 여러 파일의 이름을 나열할 때 파일 이름을 간단히 표시하는 데 사용.
   즉, * 문자는 모든 것이라는 뜻으로 사용 됨. 따라서 * 만 단독으로 사용할 경우 모든 파일을 의미.
   ex) ls * -> 현재 디렉토리의 모든 파일과 서브 디렉토리를 나열. 서브 디렉토리 내용도 출력.
         cp * /tmp -> 현재 디렉토리의 파일을 /tmp 디렉토리 아래로 복사
         ls -F t* -> t로 시작하는 모든 파일의 이름과 파일 종류를 출력. t라는 파일도 해당.
         cp *.txt ../ch3 -> 확장자가 txt인 모든 파일을 상위 디렉토리 아래의 ch3 디렉토리로 복사
         ls -l h*d -> 파일명이 h로 시작하고 d로 끝나는 모든 파일의 상세 정보를 출력. hd, had, hard, h1233324d 등이 해당.

  - 특수 문자 ? 와 [ ]
    ? (물음표)와 [ ] (대괄호) 는 모두 하나의 문자를 나타내는 데 사용. ?는 길이가 1인 임의의 한 문자를, [ ]는 괄호 안에 포함된 문자 중 하나를 나타낸다. [ ] 는 사용할 여러 문자를 나열하거나 범위를 지정할 수 있으며, 다른 특수문자와 혼합하여 사용할 수도 있다.
    ex) ls t?.txt -> t 다음에 임의의 한 문자가 오고 파일의 확장자가 txt인 모든 파일의 이름을 출력. t1.txt, t2.txt, ta.txt, tc.txt 등
                           t.txt는 해당 안됨.
          ls -l tmp[135].txt -> tmp 다음에 1, 3, 5 중 하나가 오고 파일의 확장자가 txt인 모든 파일의 이름을 출력.
                                           tmp1.txt, tmp3.txt, tmp5.txt 파일이 해당 됨. tmp.txt는 해당 안됨.
          ls -l tmp[1-3].txt -> [1-3]은 1부터 3까지의 범위를 의미. 따라서 ls -l tmp[123].txt와 결과가 같음.
                                          tmp1.txt, tmp2.txt, tmp3.txt 파일이 해당 됨.
          ls [0-9]* -> 파일명이 숫자로 시작하는 모든 파일의 목록을 출력
          ls [A-Za-Z]*[0-9] 파일명이 영문자로 시작하고 숫자로 끝나느 모든 파일을 출력.

  - 특수 문자 ~ (틸드) 와 - (하이픈)
    디렉토리를 나타내는 특수문자임.
    ~만 사용하면 현재 작업 중인 사용자의 홈 디렉토리를 나타내고, 다른 사용자의 로그인 ID와 함께 사용하면 해당 로그인 ID의 홈 디렉토리를 나타냄.
    -는 cd 명령으로 현재 디렉토리로 이동하기 직전의 디렉토리를 나타냄.
    ex) cp *.txt ~/ch3 -> 확장자가 txt인 모든 파일을 현재 작업 중인 사용자의 홈 디렉토리 아래 ch3 디렉토리롤 복사한다.
          cp ~user2/linux.txt . -> user2라는 사용자의 홈 디렉토리 아래에서 linux.txt 파일을 찾아 현재 디렉토리로 복사
          cd - -> 이전 작업 디렉토리로 이동

  - 특수 문자 ; (세미 콜론) 과 | (파이프)
    ; 과 | 는 명령과 명령을 연결한다.
    ; 는 연결된 명령을 왼쪽부터 차례로 실행하고, | 는 왼쪽 명령의 실행 결과를 오른쪽 명령의 입력으로 전달.
   ex) date ; ls ; pwd -> 왼쪽부터 차례대로 명령을 실행한다. 즉 날짜를 출력한 후 현재 디렉토리의 파일 목록을 출력하고, 마지막으로 현재 작업 디렉토리의 절대 경로를 보여준다.
         ls -al / | more -> 루트 디렉토리에 있는 모든 파일의 상세 정보를 한 화면씩 출력한다. ls -al / 명령의 결과가 more 명령의 입력으로 전달되어 페이지 단위로 출력되는 것임.

  - 특수문자 ' ' (작은 따옴표) 와 " " (큰 따옴표)
     ' ' (작은 따옴표)와 " " (큰 따옴표)는 문자를 감싸서 문자열로 만들어 주고, 문자열 안의 특수문자 기능을 없앤다.
     *, ?, ; 등을 파일 이름에 사용하거나 화면에 메시지로 출력하려고 할 때 셸이 이 문자를 특수문자로 간주하여 미리 처리하지 않도록 해야 하는데, 이 때 따옴표를 사용한다.
     ' ' (작은 따옴표)는 모든 특수문자를, " " (큰 따옴표)는 $, `, \ 을 제외한 모든 특수문자를 일반 문자로 간주하여 처리.
     셸 변수에 저장된 값을 출력할 때 셀 변수 앞에 $를 붙인다. 이럴 경우 작은 따옴표는 $를 문자 그대로 사용하지만,
     큰 따옴표는 $변수 값으로 처리하게 된다.
     ex) echo '$SHELL' -> 이럴 경우 $SHELL을 화면에 출력.
           echo "$SHELL" -> 이럴 경우 셀 환경 변수인 SHELL에 저장된 값인 현재 셸의 종류가 화면에 출력. /bin/bash를 예로 들 수 있음. 이것은 $SHELL 변수의 값을 출력함.

  - 특수 문자 `` (백 쿼터)
    키보드 상단의 숫자 1키 앞에 있는 문자를 사용. 모양이 작은 따옴표 (' ')와 유사하므로 주의해야 함. 셸은 ``로 감싸인 문자열을 명령으로 해석하여 명령의 실행 결과가 바뀌게 된다.
    ex) echo "Today is `date`" -> `date`가 명령을 해석되어 date 명령의 실행 결과로 바뀐다. 결과적으로 다음과 같이 출력된다.  Today is 2019. 11. 01 (금) 22:10:35 EDT
          ls /usr/bin/`uname -m` -> uname -m 명령의 실행 결과를 문자열로 바꾸어 파일 이름으로 사용한다.
따라서 /usr/bin 아래의 `uname -m`의 실행 결과에 해당되는 파일명이 출력됨.

  - 특수 문자 \ (역슬래시)
    \ (역슬래시)는 특수 문자 바로 앞에 사용하며, 해당 특수문자의 효과를 없애고 일반 문자처럼 처리
    ex) ls -l t\* -> t*라는 이름을 가진 파일의 상세 정보를 출력. \ 없이 사용하게 되면 t로 시작하는 모든 파일의 상세 정보를 출력.
          echo \$SHELL -> $SHELL을 화면에 출력함. echo '$SHELL'과 결과가 같음.

  - 특수 문자 >, <, >>
    <, >, >> 는 입출력의 방향을 바꾸는 특수문자임.
    ex) ls -l > res -> ls -l 명령의 실행 결과를 화면이 아닌 res 파일에 저장함.