[Linux] Shell 확장 6가지와 Shell 인용 3가지

ℹ️이 콘텐츠에는 광고가 포함되어,판매 발생 시 수익이 발생합니다.(네이버 쇼핑 커넥트, 아마존 어필리에이트, 애드센스 등)

echo 명령어를 사용해서 Shell 확장(Expansion)에 대해 알아 보겠습니다.

  • echo 명령어
  • echo는 도스, OS/2, 유닉스 및 유닉스 계열 운영 체제에서 문자열을 컴퓨터 터미널에 출력하는 명령어입니다.
  • 쉘 스크립트 변수, 터미널의 환경 변수 및 변수를 확인할 때 사용합니다.

1. Shell 확장

Shell 확장(Expansion)이란 셸에서 프로그램을 실행하기 직전 사용자가 입력한 인자를 정해진 의미에 맞게 해석해서 입력 or 출력으로 전환하는 것을 의미합니다. 프로그램은 echo를 포함한 명령어와 쉘에서 실행하는 모든 기능과 명령어들을 의미합니다.

~]$ echo hello oooo
hello oooo

echo 명령어로 인수(or 인자: Argument)가 표시됩니다.

  • 아스타리스크(*)를 활용 했을 경우 현재 폴더의 모든 파일을 출력합니다.
~]$ echo *
1 123test.txt TestFile.txt abc.12 abc123 gg1 gg1~ gg2 gg3 index.php1 
index.php2 index.php2~ output.txt sort.txt

1.1 경로명 확장(Pathname Expansion)

와일드카드가 작동하는 메커니즘을 경로명 확장(Pathname Expansion)이라고 합니다.

~]$ ls
1 123test.txt TestFile.txt abc.12 abc123 gg1 gg1~ gg2 gg3 index.php1 
index.php2 index.php2~ output.txt sort.txt

~]$ echo abc*
abc.12 abc123
~]$ echo *ndex*
index.php1 index.php2 index.php2~
# 중간에 애스터리스크를 넣을 경우입니다. 
~]$ echo /usr/lib/*/sysctl.d
/usr/lib/*/sysctl.d

1.2 틸드 확장(Tilde Expansion)

주로 cd 명령어에서 많이 사용하는 틸드 확장(Tilde Expansion)은 틸드(~)를 사용합니다. echo에서도 동일한 사용이 가능합니다.

~]$ echo ~rocky/
/home/rocky/

1.3 산술 확장(Arithmetic Expansion)

~]$ echo $((2 + 2))
4

산술 확장은 산술 연산을 수행하며, 셸 프롬프트에서 계산기로 사용할 수 있습니다. 정수 확장만 지원하고 소수점은 지원하지 않습니다.

연산자설명
+덧셈
-뺄셈
*곱셈
/나눗셈(단, 확장은 정수 연산만 지원하므로 결과는 정수가 됩니다)
%Modulo, 간단히 “나머지”를 의미합니다
**제곱(승수)
  • 5의 3 제곱에 2를 곱할 경우 다음과 같이 입력합니다.
~]$ echo $(($((5**3)) * 2))
250
  • 산술확장 나눗셋 연산자 예시입니다. 일반 나눗셈과 %로 사용 시 나누기 후 정수의 나머지 숫자를 확인할 수 있습니다.
~]$ echo Hello   $((7/2))
Hello 3
~]$# echo Hello   $((7%2))
Hello 1

1.4 중괄호 확장(Brace Expansion)

중괄호 확장(Brace Expansion)은 중괄호가 포함된 여러 텍스트 문자열을 만들 수 있습니다.

~]$ echo TEST{A,B,C}GG
TESTAGG TESTBGG TESTCGG
~]$ echo TEST-{A,B,C}-GG
TEST-A-GG TEST-B-GG TEST-C-GG

중괄호 확장은 머리말(preamble)이라는 선행 영역과 후행 영역에 해당하는 postscript(추신)이 포함될 수 있습니다.

  • 앞서 확인한 것처럼 쉼표로 문자열을 표현하거나
  • 정수 및 문자의 범위를 표현할 수 있습니다.
~]$ echo TEST-{A..G} 
TEST-A TEST-B TEST-C TEST-D TEST-E TEST-F TEST-G
~]$ echo TEST-{g..a}
TEST-g TEST-f TEST-e TEST-d TEST-c TEST-b TEST-a
~]$ echo {001..20} 13 14 15
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 13 14 15
  • 중첩 사용도 가능합니다.
~]$ echo ABC-{A{1,2},B{3,4}}-DEF
ABC-A1-DEF ABC-A2-DEF ABC-B3-DEF ABC-B4-DEF

중괄호 확장의 용도는 디렉토리 목록을 만들 때 유용하게 사용할 수 있습니다. “년도-월” 형식으로 숫자 디렉토리를 만들 수 있습니다.

~]$ mkdir 2020-2021
~]$ cd 2020-2021
~]$ mkdir mkdir {2020..2021}-{01..12}

1.5 매개변수 확장(Parameter Expansion)

매개변수(영어: parameter 파라미터[*])란 변수의 특별한 한 종류입니다. 인풋으로 제공하는 여러 데이터 중에 하나를 가리키기 위해 사용됩니다.

~]# echo $USER
root
## 사용 가능 변수 목록 확인 ▼
printenv 
## 매개변수 변수 이름이 틀릴 경우 빈 문자열이 출력됩니다.
~]# echo $SUER

~]#

1.6 명령 치환(Command Substitution)

명령 치환으로 명령어 출력을 확장으로 변경할 수 있습니다.

~]# ls  $(which rsync)
/usr/bin/rsync

2. Shell 인용(Quoting)

달러 사인($)을 사용했을 때 “$100″으로 출력된 것이 아닌 “100”으로 출력됨을 알 수 있습니다. 인용을 사용해서 누락된 부분에 대한 출력이 가능합니다. 쉘은 원치 않는 확장을 차단하는 인용이라는 메커니즘을 제공합니다.

~]# echo Show Me The Money
Show Me The Money
~]# echo Show Me The Money $100
Show Me The Money 00
  • Quoting을 사용해서 쉘에 특수한 의미를 제거하는 데 사용할 수 있습니다.
  • 특수 문자 비활성화 기능
  • 예약어가 인식되지 않도록 설정 기능
  • 매개 변수 확장 방지 기능

2.1 더블 쿼츠(Double Quotes)

더블 쿼츠를 사용해서 더블 쿼츠 안의 모든 특수 문자는 일반 문자로 적용 받습니다. 예외는 $\(backslash) 및 `(back-quote) 3개의 문자입니다.

더블 쿼츠 적용/미적용설명
$ \ ` 쌍 따옴표 안에서 3개의 기호는 일반문자 예외 적용 받음.
> 매개변수 확장[$], 산술 확장[$],명령어 치환[\]은 그대로 실행
적용 대상단어 분할, 경로명 확장, 틸드(~) 확장, 괄호 확장을 숨길 수 있음.

“05-06 access_log”이란 공백이 있는 파일을 확인해야 하는 경우 단일 인수가 아닌 두개의 인수로 인식해서 파일을 출력할 수 없는 오류 메시지를 확인할 수 있습니다.

~]# ls -l 05-06 access_log.txt
ls: cannot access 05-06: No such file or directory
ls: cannot access access_log.txt: No such file or directory

이제 쌍따옴표(Double Quotes)를 사용했을 때 나오는 내용입니다.

~]# ls -l "05-06 access_log.txt"
-rw-rw-r-- 1 root   root   18 2029-07-20 17:13 05-06 access_log.txt

더블 쿼츠는 텍스트에서 공백이 있더라도 유닉스 시스템에서는 한 칸으로 인식하며 텍스트의 일부로 인식하지 않습니다.

~]# echo Show    Me The    Money
Show Me The Money
## 텍스트의 일부로 인식시키기 위해 쌍따옴표 사용하기
~]# echo "Show    Me The    Money"
Show    Me The    Money
##
~]# echo $(cal)
February 2024 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

~]# echo "$(cal)"
    February 2024   
Su Mo Tu We Th Fr Sa
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29      

2.2 싱글 쿼츠(Single Quotes)

싱글 쿼츠(Single Quotes)는 모든 확장을 제한한 때 사용합니다. 더블 쿼츠에서 제한할 수 없던 $ 옵션을 제한할 수 이쓴 것을 확인할 수 있습니다.

~]# echo Show Me The Money '$100'
Show Me The Money $100

2.3 이스케이프 문자(Escape Character) 백슬러쉬

‘$’ 문자를 출력하기 위해 이스케이프 문자인 백슬래시(\)를 넣어서 출력할 수 있습니다. 더블 퀴츠에서도 이스케이브 문자인 백슬러시를 적용해서 $를 출력할 수 있습니다. 백슬래시(\)는 쌍 따옴표 안에서 자주 사용됩니다.

~]# echo Show Me The Money \$100
Show Me The Money $100
~]# echo Show Me The Money "\$100"
Show Me The Money $100

2.3 Shell 인용과 이스케이프 문자 정리표

차후 더 많은 확장과 인용을 사용하게 되기 때문에 가장 기본적인 Shell 확장과 인용에 대해 정리 해 봤습니다.

쉘 스크립트(Shell Script)

Similar Posts

  • 셸 스크립트: 변수(variable)와 상수(constant)

    셸 스크립트에서 변수란 단어가 가진 의미는 변할 수 있는( variable) 값이다. 또 상당수의 애플리케이션에서 변수가 이와 같은 의미로 사용되고 있다. 상수(constant)는 이름이 정의되고 값이 지정된다는 점은 변수와 같다. 하지만 그 값은 변하지 않는다는 점이 다르다. 쉘은 변수와 상수를 따로 구분하지 않는데 용어를 구분하는 이유는 쉘 이용자의 편의를 위해서이다. 목차1. Shell 확장1.1 경로명 확장(Pathname…

  • [Linux] 쉘(Shell)과 커널&쉘 스크립트 및 프롬프트

    리눅스에 대해 공부하면서 터미널 창에서 명령어를 입력해서 관리를 하지만 시스템 자체에 대한 공부가 리눅스 서버를 운영하는데 많은 도움이 되기 때문에 기초와 개념에 대해 알아야 할 필요성을 가지게 되었습니다. 리눅스 쉘(Shell)과 쉘 스크립트(Shell Script) 그리고 프롬프트(Prompt)의 기본 개념에 대해 알아 보겠습니다. 목차1. Shell 확장1.1 경로명 확장(Pathname Expansion)1.2 틸드 확장(Tilde Expansion)1.3 산술 확장(Arithmetic Expansion)1.4 중괄호…

  • 셔뱅(Shebang) [#! /bin/bash]

    shebang (셔뱅 또는 해시뱅)은 스크립트 파일의 첫 줄에 쓰이는 #!(해시 기호 + 느낌표)로 시작하는 구문입니다. 이 줄은 해당 스크립트를 어떤 인터프리터로 실행 할지를 지정합니다. 인터프리터(interpreter)는 프로그래밍 언어로 작성된 코드를 한 줄씩 읽고 즉시 실행하는 프로그램입니다. 이는 “작성된 명령을 번역해서 곧바로 실행해주는 번역기”라고 볼 수 있습니다. 보통 ASCII 텍스트 파일로 작성된 셸 스크립트에서 해시…

  • 로그 파일 삭제 쉘 스크립트 만들기(날짜 20xx, 용량)

    httpd.conf 파일에 access_log 및 error_log를 설정 했을 때 logrotate 설정이 아닌 경우 로그 파일 삭제 쉘 스크립트가 필요할 때가 있습니다. 목차1. Shell 확장1.1 경로명 확장(Pathname Expansion)1.2 틸드 확장(Tilde Expansion)1.3 산술 확장(Arithmetic Expansion)1.4 중괄호 확장(Brace Expansion)1.5 매개변수 확장(Parameter Expansion)1.6 명령 치환(Command Substitution)2. Shell 인용(Quoting)2.1 더블 쿼츠(Double Quotes)2.2 싱글 쿼츠(Single Quotes)2.3 이스케이프 문자(Escape Character) 백슬러쉬2.3…

  • 셸 스크립트: 셸 들여쓰기 및 확장 옵션명[long 옵션명]

    명령어를 길게 사용하다 보면 여러 명령어 줄을 넘겨서 입력하는 경우가 발생합니다. 가독성을 높이기 위해 명령어를 문장 연결 하는 백슬래시(\)를 사용하여 셸 들여쓰기를 할 수 있습니다. 목차1. Shell 확장1.1 경로명 확장(Pathname Expansion)1.2 틸드 확장(Tilde Expansion)1.3 산술 확장(Arithmetic Expansion)1.4 중괄호 확장(Brace Expansion)1.5 매개변수 확장(Parameter Expansion)1.6 명령 치환(Command Substitution)2. Shell 인용(Quoting)2.1 더블 쿼츠(Double Quotes)2.2 싱글 쿼츠(Single…

  • 셸 스크립트란? 셸과 셸 프롬프트&bash shell

    목차1. Shell 확장1.1 경로명 확장(Pathname Expansion)1.2 틸드 확장(Tilde Expansion)1.3 산술 확장(Arithmetic Expansion)1.4 중괄호 확장(Brace Expansion)1.5 매개변수 확장(Parameter Expansion)1.6 명령 치환(Command Substitution)2. Shell 인용(Quoting)2.1 더블 쿼츠(Double Quotes)2.2 싱글 쿼츠(Single Quotes)2.3 이스케이프 문자(Escape Character) 백슬러쉬2.3 Shell 인용과 이스케이프 문자 정리표 ▥ 셸 스크립트란(shell script)? 1. 셸이란? 키보드에 입력한 명령어를 운영체제에 전달해서 전달한 명령어를 실행하게 하는…

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Prove your humanity: 7   +   6   =