Linux/Shell Programming

02.[Linux] 쉘(shell)과 규칙들 1

xgoo 2023. 1. 19. 02:22
반응형

리눅스에서는 Quoting Rule이라는 규칙들이 존재합니다.

 

Quoting Rule(인용 규칙)

먼저들어가기전에 메타 문자부터 설명하겠습니다.

Metacharacters(메타 문자)란 shell에서 특별히 의미를 정한 문자들을 얘기합니다.

" \ ? ( ) ... * % {} []  띄어쓰기 포함 "등을 얘기하는 것이죠

각 문자들의 의미를 설명 하면

기호 의미
* 모든 문자
a* a로 시작하는 모든 문자
? ?개의 글자 개수인 문자 (ex. post라는 문자는 ????물음표를 4개 사용 )
{1..3} 1부터 3까지의 문자 (ex. p{1..3} p로 시작하는 문자들중 1에서 3까지의 문자

Quoting rule은 메타문자의 의미를 제거하고 단순한 문자로 변경하는 것을 말합니다.

방법에는 아래의 3가지가 존재합니다.

BackSlash(\)

- \ 바로 뒤의 메타문자의 의미 제거

 

Double Quotes(" ")

- " " 안의 모든 메타문자들의 의미를 제거. 단 $,``은 제외 

 

Single Quotes(' ')

- ' ' 안의 모든 메타문자들의 의미를 제거

 

메타 문자의 의미를 제거한 다는 것을 예를 들면

* 는 모든 문자를 뜻하는 의미를 가진 메타 문자입니다.

만약 ***라는 파일을 만들려고하면 과연 실행이 될까요?

$ touch ***

따로 오류는 발생하지 않지만 파일이 생성 되지 않습니다.

이때 ***라는 이름을 가진 파일을 만들고 싶다면 아래의 명령을 통해 생성 할 수 있습니다.

$ touch '***'

ls      

실행결과

위 ls 명령을 통해 확인 해 본 결과 ***라는 파일이 생성된 것을 볼 수 있습니다.

꼭 Single quotes가 아닌 double quotes , backSlash 등으로 똑같은 실행 결과를 얻을 수 있습니다.

Nesting commands(중첩 명령문)

특정 메타기호가 아닌 명령문을 일반 문자와 함께 사용하려고 할 땐 어떻게 해야 할 까요?

위 내용과 비슷합니다.

이번엔 "This time is date"라는 파일을 생성 해 보겠습니다. 어? 우리는 date라는 명령어를 알고 있습니다.

바로 시간을 출력해주는 명령어입니다. 그럼 아래명령어를 실행했을 경우 "This time is 현재시간"이 출력 될거라고 믿을 겁니다.

$ touch "This time is date"

하지만 ls 명령어로 확인한 결과 입력한 문자열 그대로 출력 되는 것을 볼 수 있는데요

실행결과

우리가 원하는 값을 출력하고자 할 땐 

일반 문자열 제외 명령어를 $()로 감싸거나 ``로 감싸기만 하면 됩니다.

$ touch "This time is $(date)"

$ touch "This time is `date`"

ls 명령어로 확인해 보면 아래와 같은 결과 값을 얻을 수 있습니다.

실행결과

이렇게 중첩으로 명령어를 사용할 때는 Double quotes를 사용해야 합니다. 왜냐하면

Single quotes는 $와 ``조차 의미를 지워버리기 때문이죠

touch 'This time is `date`'

실행결과

위 처럼 주의를 하면서 사용하면 명령어와 각 문자들을 효율 좋게 사용할 수 있습니다.

 

Alias(별칭)

Alias는 명령에 새로운 별명 별칭을 부여해주는 명령어입니다.

관련 명령에는 3가지만 기억하면 됩니다.

 

alias 등록

$ alias 별칭이름=명령문

별칭은 위와 같이 만들 수 있습니다. 예를 들어 아래와 같이 clear 명령어를 c라는 명령어로 만들 수 있습니다.

$ alias c=clear

* clear 명령는 입력한 명령어들을 화면상에서 지워주는 명령입니다.

c라는 명령을 입력하면 clear와 똑같은 기능을 볼 수 있습니다.

 

alias 확인

$ alias

입력한 alias

적용되어 있는 모든 alias 명령들이 출력됩니다.

 

alias 삭제

$ unalias 별칭이름

특정한 별칭을 삭제할 수 있습니다.

 

* 중요

alias 명령으로 지정한 별칭들은 로그아웃시 초기화 되므로 

.bashrc 파일에 alias 명령문들을 저장해 두면 껏다 키거나 로그아웃했을 때 초기화되는 것을 막을 수 있습니다.

아래 명령으로 추가 할 수 있습니다.

$ echo "alias c=clear" >> .bashrc

이 명령은 "alias c=clear"라는 명령문을 .bashrc파일 제일 아래 칸에 추가해라 라는 의미입니다.

꼭! 화살표(>)를 두 개로 해주셔야합니다. 만약 한 개로 했다면 기존에 있는 내용을 덮어 씌운다는 의미가 돼서

.bashrc 파일에 큰 손상을 줄 수 있습니다.

Prompt(프롬프트)

프롬프트는 우리가 Shell을 사용할 때 명령어 입력칸 바로 좌측에 있는 부분을 얘기합니다.

ubuntu@host:~$             <-- 이부분을 말합니다.

각 문자가 의미하는 내용을 볼까요?

이름 의미
ubuntu 로그인한 사용자 명
host 호스트 네임
~ 현재 위치
그외 큰 의미 x 단순한 문자

프롬프트는 PS1 환경변수에 저장되게 됩니다. 프롬프트를 변경할 때는 PS1 내용을 변경하면 되겠죠

그런데 프롬프트를 변경할 땐 특수문자가 들어가게 됩니다. 종류를 한 번 보시죠

특수문자 의미
\h 호스트이름
\u 사용자이름
\w 작업 디렉토리 - 절대경로
\W 작업 디렉토리 - 상대경로
\d 오늘 날짜
\t 현재 시간
\$ $또는 # 프롬프트 모양

이런 특수문자를 이용해서 프롬프트를 만들 수 있습니다. 한 번 만들어 보시죠

이전 시간에 배웠던 변수 만드는 방법을 참고 하면 내용을 수정할 수 있습니다.

$ PS1='\u@\h:\w\$ '

위 명령과 같이 수정을 하게 되면 

ubuntu@host:~ $ 처럼 바뀌게 됩니다.

 

PS1도 로그아웃하면 초기화 되니 .bashrc 파일 내용 아래에 추가해주면 영구적용되게 됩니다.

이상입니다.

 

리눅스의 모든 것을 배울 때까지 공부해봅시다.

 

 

 

 

 

반응형