Linux 159

[Shell Script] Pattern Matching

Pattern Matching *, ?, [ ]와 같은 glob 문자를 이용한 패턴 매칭은 파일명 매칭, case 문, 매개변수 확장 등과 같이 쉘 스크립트 전반에서 사용할 수 있다. Glob 문자 문자 의미 * empty를 포함해 모든 문자와 매칭된다. ? 임의의 문자 하나와 매칭된다. […] Bracket 표현식 내 하나의 문자와 매칭된다. Bracket 표현식 표현식 의미 [XYZ] X or Y or Z 문자에 대해 매칭된다. [X-Z] X부터 Z까지의 문자를 -로 표현할 수 있다. [[:class:]] POSIX character class와 매칭된다. [^…] ^문자는 NOT을 의미한다. 괄호 내 문자 이외의 문자와 매칭된다. [!…] ! 문자는 NOT을 의미한다. 괄호 내 문자 이외의 문자와 ..

Linux/Shell Script 2022.07.16

[Shell Script] Exit Status - 2

Exit Status 2022.07.05 - [Shell Script] Exit Status - 1 에 이어서 작성한다. pipe로 연결된 명령의 종료 상태 값 pipe로 여러 명령이 연결되어 실행될 때는 마지막 명령의 종료 상태 값이 사용된다. 아래 명령문의 경우 command1의 성공 여부와 상관없이 sed는 항상 참을 반환하기 때문에, 항상 종료 상태 값으로 0을 반환한다. command1 arg1 arg2 | sed -n '/:/,/^$/p' command1 명령 실패 시 비정상 종료 상태 값을 반환하려면, 파이프에 연결된 명령 중 하나라도 오류가 생길 경우 비정상 종료 상태 값을 반환하는 pipefail 옵션을 사용해야 한다. sh에서는 pipefail을 사용할 수 없으므로, 명령을 분리하거나 ..

Linux/Shell Script 2022.07.06

[Shell Script] Exit Status - 1

Exit Status 종료 상태 값은 명령이 정상적으로 실행을 완료했는지 아니면 오류가 발생했는지 판단할 수 있도록 한다. Shell에서 실행되는 모든 명령은 종료 상태 값을 반환하며 if, while, until, &&, ||은 종료 상태 값을 이용해서 참, 거짓을 판단한다. 명령이 정상적으로 종료된 경우, 0을 반환하고 그 이외의 값은 오류를 분류하는 용도로 사용된다. 명령의 종료 상태 값은 $? 변수로 알 수 있다. 앞선 명령이 정상 종료되어야 할 경우 앞서 실행된 명령에 오류가 발생했을 때 뒤의 명령이 실행되면 안 되는 경우, && 연산자를 이용해 명령을 연결하거나 test 명령을 이용하여 종료 상태를 확인한다. # && command1 ... && command2 # test command1 ...

Linux/Shell Script 2022.07.05

[Shell Script] Functions - 2

Functions 2022.07.02 - [Shell Script] Functions - 1에 이어서 마저 작성한다. 함수 정의 방법 함수를 nesting 해서 작성 함수 안에 함수를 작성할 수 있다. shell에서 함수는 모두 전역 함수가 되지만, nesting 함수는 외부 함수가 실행되기 전에는 정의된 상태가 아니기 때문에 실행하기 위해서는 외부 함수가 먼저 실행되어야 한다. 함수에서 연산 결과를 리턴하는 방법 프로그래밍 언어와 다르게 shell에서 return문은 연산 결과를 반환하는 데 사용하지 않고, exit과 같이 함수 종료 상태를 지정하는 용도로 사용된다. shell에서 함수는 일반 명령과 동일하게 사용되므로, 실행 결과도 외부 명령을 사용한 것처럼 받는다. 함수에 인수를 전달하기 외부 명령..

Linux/Shell Script 2022.07.03

[Shell Script] Functions - 1

Functions { ;}, ()를 이용해 명령 그룹을 만들면 같은 context에서 실행되어 명령 그룹 전체가 하나의 명령처럼 실행되는 것과 같은 화가를 가진다. 따라서 명령 그룹에 이름을 붙임으로써 함수를 정의하면 일반 명령과 동일하게 사용할 수 있다. { ;}는 현재 shell에서, ()은 subshell에서 실행되므로 보통 { ;}를 사용하여 함수를 정의한다. # 파이프로 인해 subshell에서 실행되어 echo $var는 값이 표시되지 않는다. echo hello world | read var; echo "$var" # 명령 그룹을 만들면 read, echo 명령이 같은 context에서 실행되어 값이 표시된다. echo hello world | { read var; echo "$var" ;}..

Linux/Shell Script 2022.07.02

[tar] 압축/해제

tar Tape ARchiver의 준말로 여러 파일을 하나의 파일로 묶거나 풀 때 사용한다. 💡 아카이버 (Archiver) 여러 개의 파일을 하나로 파일로 합치는 프로그램 파일을 저장 장치에 저장하거나 전송할 때 파일이 많으면 관리하기 힘들기 때문에, 하나의 파일로 처리하기 위한 목적으로 만들어졌다. tar는 여러 파일을 하나의 파일로 묶기만 할 뿐, 데이터 크기를 줄이기 위한 압축을 수행하지는 않는다. 대신 gzip, bzip2 등의 방식으로 압축할 수 있는데, 이는 tar 명령의 옵션으로 처리할 수 있다. tar 명령에 의해 만들어지는 파일은 .tar 확장자를 사용한다. gzip으로 압축된 경우에는 .targz, tgz을, bzip2로 압축된 경우에는 .tar.bz2, .tb2, tbz, tbz2 ..

Linux 2022.06.29

[Shell Script] Variables - 2

Variables 2022.06.27 - [Shell Script] Variables - 1 글에 이어서 작성한다. Variable states 변수는 3가지 상태를 가질 수 있다. 1. 변수 없음 또는 unset 변수에 값을 대입한 적이 없는 상태로 아래 명령어로 선언만 했거나 unset 명령을 사용한 경우에 해당된다. declare local 2. 값이 NULL인 경우 = ="" ='' 3. 값이 NULL 이외인 경우 =123 =" " ='hello, world' 값 구분하기 조건문 if를 사용하면 값을 가진 상태와 가지지 않은 상태를 구분할 수 있다. 값이 없는 경우 test -v ; echo $?; 💡 test 명령 파일 형식 또는 값을 비교한다. 값이 없거나 NULL인 경우 test -z ; e..

Linux/Shell Script 2022.06.28

[Shell Script] Variables - 1

Variables 변수명은 알파벳, 숫자, _로 구성되며, 숫자는 맨 처음에 올 수 없다. 변수 이름을 대문자로 사용할 때는 환경 변수와 중복되지 않도록 주의해야 하며, 자식 프로세스에서도 생성한 변수를 사용할 때는 export해야 한다. 현재 Shell에 정의된 모든 변수 확인 compgen -A variable 또는 $ 를 입력하고 tab을 입력하여 변수 목록을 확인할 수도 있다. 정의된 변수 삭제 unset -v # 예시 unset -v num 특징 같은 줄에 여러 변수를 생성할 수 있다. ;로 구분하지 않아도 된다. 단 local, declare, export 명령을 사용하는 경우에는 적용되지 않는다. foo=100 bar=$foo zoo=$bar echo $foo $bar $zoo 변수명으로 명..

Linux/Shell Script 2022.06.27

[Shell Script] Escape Sequences

Escape 문자 Escape 문자는 아래의 경우에서 처리된다. echo -e " " 또는 echo -e ' ' $ ' ' printf "" 또는 printf ' ' printf %b sh에서의 echo " ", echo ' ' 모두 이스케이프 문자를 처리한다. 따라서 -e 옵션이 없다. Quotes에 따른 escape 문자 처리 비교 echo 명령의 -e 옵션에 따른 escape 문자 처리 해석 시에는 -e 옵션을 제거한 후 명령을 실행해보고 비교하면 된다. sh와 bash에서 8진수, 16진수 처리 sh에서는 echo, printf에서 16진수를 사용할 수 없다. bash는 echo, printf, $ ' ' 모두 처리가 조금 다르다. sh, bash 모두 사용하려면 8진수를 사용해야 한다. 8진수,..

Linux/Shell Script 2022.06.26

[Shell Script] Quotes - 2

2022.06.04 - [Shell Script] Quotes - 1에 이어서 작성한다. Single quotes ' ' 모든 문자를 그대로 표시하며 escape도 되지 않는다. 따옴표로 감싼 문자열 내에서 따옴표를 입력할 때는 아래와 같은 방법으로 입력한다. no quotes 상태에서 ' escape '를 쌍따옴표로 감싸기 echo 'test'\''test' echo 'test'"'"'test' Single quotes 사용이 필요한 경우 1. Command String 사용 시 큰따옴표를 사용하면 작성 당시 변숫값이 확장되어 정의되므로 실행 시 의도대로 동작하지 않을 수 있다. 2. Trap Handler 사용 시 3. Prompt 설정 $' ' escape를 사용할 수 있는 single quotes..

Linux/Shell Script 2022.06.07