SH 20

[Shell] 변수 기본값 설정

개요 쉘 스크립트에서 변수를 초기화화하면 환경변수 등으로 설정된 값을 사용하거나 그렇지 않은 경우가 존재할 수 있다. 때문에 쉡 스크립트에서 변수를 초기화할 때 기본값을 설정하는 방법을 제공해주고 있다. 이 글에서는 변수 선언 시 기본값을 설정하는 방법에 대해 적어둔다. 변수의 상태 쉘 스크립트에서 변수의 상태는 크게 세 가지로 구분할 수 있다. 선언된 변수 값이 NULL이 아닌 변수 값이 NULL인 변수 선언되지 않은 변수 쉘 스크립트는 변수의 상태와 사용한 확장자에 따라 기본값으로 초기화되는 조건이 달라질 수 있다. - / = 참조하는 변수가 선언되지 않은 경우에는 -, :, = 등의 확장자를 사용하여 변수의 기본값을 초기화한다. 확장자 설명 ${VAR-value} VAR이 선언되지 않은 경우, va..

Linux/Shell Script 2024.03.07

[Shell Script] 데이터 타입과 Test 명령

Shell 데이터 타입과 test 명령 Shell에는 숫자와 문자를 구분하는 데이터 타입이 없고, 사칙연산을 위한 연산자도 없다. 명령문을 구성하는 모든 것은 문자열이고, 산술 연산은 확장이나 명령을 통해 제공된다. 즉, 32와 "32"는 동일하다. 또한 문자열을 다루는 부분에서는 문자열로, 산술 연산을 다루는 부분에서는 숫자로 사용된다. test 명령은 shell Script 작성 시 빠지지 않고 등장하는 표현식으로 보통 조건문에 많이 사용한다. test와 [는 같은 명령이다. test -d /etc; echo $? [ -d /etc ]; echo $? Shell에서 test 명령을 사용할 때는 다음과 같은 점을 주의해야 한다. test 명령 사용 시 주의점 1. 변수 비교 시 qoute 처리 필요 t..

Linux/Shell Script 2023.10.11

[Linux] root 영역 디렉터리 (proc/sys/dev)

개요 이 글에서는 https://mug896.github.io/bash-shell/etc.html 에서 설명하고 있는 / 영역 아래 일부 디렉터리에 대해 간단히 정리한다. /proc 현재 시스템에서 실행되는 프로세스에 대한 정보를 제공하기 위한 가상의 파일 시스템이다. 사용자가 커널이 가지고 있는 정보를 쉽게 사용할 수 있도록 메모리 상에 가상의 파일 시스템을 만들어 구조적으로 제공하는 것으로, 실제 파일이 존재하는 것이 아니다. 각 파일은 커널 내의 특정 함수와 연결되어 있어 실시간으로 read 하여 정보를 확인할 수 있다. 또한 프로세스 정보뿐만 아니라 커널이 가진 여러 시스템 관련 정보도 제공하고 있으며, write 하여 값을 변경할 수도 있다. 즉, 파일 시스템을 통해 직접 커널 옵션 설정을 변경..

Linux 2023.09.15

[Shell Script] Login Shell VS Non-Login Shell

개요 2023.09.13 - [Shell Script] 대화형 VS 비대화형 쉘에서 쉘의 종류를 대화형과 비대화형으로 구분해 봤는데, 이 글에서는 관점을 달리하여 Login Shell과 Non-Login Shell로 쉘의 실행 환경을 구분해 본다. Login Shell Login Shell은 원격 서버에 SSH나 Telnet으로 접속해 login 과정을 거쳐 사용하는 환경이다. 프롬프트 상에서 아래 명령을 실행했을 때, 첫 문자가 '-'이면 로그인 쉘임을 나타낸다. echo $0 또는 아래 명령을 통해 알아볼 수 있다. shopt -q login_shell; echo $? # -q : 나열된 옵션이 모두 활성화되어 있으면 0을 반환한다. Login Shell을 시작할 때는 아래의 파일을 순서대로 읽어 들..

Linux/Shell Script 2023.09.14

[Shell Script] 대화형 VS 비대화형 쉘

쉘 실행 환경 Shell이 실행되는 환경은 크게 두 가지로 구분할 수 있다. 대화형 (Interactive) : 프롬포트를 통해 사용자로부터 직접 명령을 입력받아 실행한다. 비대화형 (Non-Interactive) : 스크립트 파일 등을 실행한다. history, alias, job control과 같은 기능은 기본적으로 대화형 쉘에서 사용하기 위한 기능이므로 비대화형 쉘에서는 비활성화된다. 쉘 실행 환경 확인 아래 명령을 통해 실행 중인 쉘이 대화형인지, 비대화형인지 확인할 수 있다. case $- in *i*) echo interactive shell ;; *) echo non-interactive shell ;; esac set 명령에 의해 설정된 option flags를 저장하고 있는 $- 변수의..

Linux/Shell Script 2023.09.13

[Shell Script] #! - Shebang

#! shebang, sharpbang, shabang, hashbang 등으로 칭해지는 문자로, 스크립트 파일의 첫 줄에 사용하여 스크립트가 어떤 명령으로 실행될지를 지정한다. 명령어의 경로는 절대 경로 또는 현재 디렉터리로부터의 상대 경로로 지정할 수 있다. 변수는 사용할 수 없고, 사용할 수 있는 옵션은 하나로 제한된다. 예시 #! /bin/bash # bash 스크립트 실행을 위한 shebang line ... #! /bin/sed -f # sed 스크립트 실행을 위한 shebang line ... #! /usr/bin/awk -f # awk 스크립트 실행을 위한 shebang line ... #! /usr/bin/perl # perl 스크립트 실행을 위한 shebang line ... #! /u..

Linux/Shell Script 2022.09.24

[read] 사용자 입력 / 파일 입력

read 파일 디스크립터에서 값을 읽는 명령어다. 사용자로부터 값을 입력받아 변수에 저장하거나, 파일의 내용을 입력받을 때 사용한다. 사용자 입력 read 명령어로 사용자의 키보드 입력을 변수에 저장하여 사용한다. #! /bin/bash echo "name: " read NAME echo "Your name is" $NAME 파일 입력 파일 디스크립터를 이용하여 파일의 한 행을 변수에 저장한다. #! /bin/bash # 내용을 읽을 파일 FILE=user.sh # 파일 디스크립터로 입력 읽기 read line < $FILE echo $line 파일 내용 전체를 읽을 때는 while 문을 사용할 수 있다. #! /bin/bash FILE=user.sh while read line do echo $line..

Linux/Shell Script 2022.09.19

[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
1 2