[Linux] Shell Script 변수(variable), 연산자(operator)

윤동기·2023년 2월 1일
0

Linux

목록 보기
4/9
post-thumbnail

1.1 Shell Script

  • shell script는 shell에서 실행되는 명령어(command)와 shell script용 명령어(operator)들로 이루어진 실행 파일이다.
    지정된 명령어 해석기가 shell script의 내용을 순차적으로 실행한다.

  • shebang

    • 해당 shell script파일을 실행할 명령어 해석기(command interpreter)를 지정한 라인을 말한다.
    • shell script의 가장 첫 줄 & 첫 컬럼에서 시작해야한다.
    • ex1) #!/bin/bash
    • ex2) #!/usr/bin/perl
    • ex3) #!/usr/bin/python

1.2 Shell Script : 변수(Variable)

변수 사용시에는 "=" 기호 앞뒤로 공백이 없이 입력하면 대입연산자가 된다.
그리고 선언된 변수는 기본적으로 전역 변수(global variable)다. 단 함수 안에서만 지역 변수(local variable)를 사용할 수 있는데 사용할려면 변수 명 앞에 local을 붙여주면 된다.
그런데 전역 변수는 현재 실행된 스크립트 파일에서만 유효하다. 자식 스크립트에서는 사용 할 수 없는 변수다.
변수 명 앞에 export을 붙여주면 환경 변수(environment variable)로 설정되어 자식 스크립트에서 사용 가능하다.
환경 변수 사용시 예약 변수(reserved variable)에 주의하자.(참고로 환경 변수는 .bash_profile에서 정의한다.)

예약 변수(Reserved Variable)

문자설명
HOME사용자의 홈 디렉토리
PATH실행 파일을 찾을 경로
LANG프로그램 사용시 기본 지원되는 언어
PWD사용자의 현재 작업중인 디렉토리
SHELL로그인해서 사용하는 쉘
BASHBASH 실행 파일 경로
LOGNAME로그인 이름
UID사용자 UID
EUIDsu 명령에서 사용하는 사용자의 유효 아이디 값 (UIDEUID 값은 다를 수 있음)
USER사용자의 이름
USERNAME사용자 이름
GROUPS사용자 그룹 (/etc/passwd 값을 출력)

위치 매개 변수(Positional Parameters)

문자설명
$0실행된 스크립트 이름
$1$1 $2 $3 ... ${10} 인자 순서대로 번호가 부여된다. 10번째부터는 "{}"감싸줘야 함
$*전체 인자 값
$@전체 인자 값 ($* 동일하지만 쌍따옴표로 변수를 감싸면 다른 결과 나옴)
$#매개 변수의 총 개수

1.3 Shell Script : 연산자(Operator)

논리 연산자(Logical Operators)

문자설명
&&, -a논리 AND
| | , -o논리 OR

산술 연산자(Arithmetic Operators)

문자설명
+더하기
-빼기
*곱하기
/나누기
**누승(exponentiation), 거듭제곱(power)
%modulo 나 mod (정수 나누기에서 나머지 값)
+=상수값 만큼 증가(plus-equal)
-=상수값 만큼 감소(minus-equal)
*=상수값을 곱함(times-equal)
/=상수값으로 나눔(slash-equal)
%=상수값으로 나눈 나머지 값(mod-equal)

비트 연산자(Bitwise Operators)

문자설명
<<=비트 왼쪽 쉬프트(쉬프트 한 번당 2를 곱하는 것과 동일함)
<<=left-shift-equal
>>비트 오른쪽 쉬프트(쉬프트 한 번당 2로 나눔)
>>=right-shift-equal(<<=와 반대)
&비트 and
&=비트 and-equal
|비트 OR
|=비트 OR-equa
~비트 negate
!비트 NOT
^비트 XOR
^=비트 XOR-equa

정수 비교(Integer Comparison)

문자설명
-eq같음
-ne같지 않음
>, -gt더 큼(> 이중 소괄호에서 사용 가능)
>=, -ge더크거나 같음(>= 이중 소괄호에서 사용 가능)
<, -lt더 작음(< 이중 소괄호에서 사용 가능)
<=, -le더 작거나 같음(<= 이중 소괄호에서 사용 가능)

문자열 비교(String Comparison)

문자설명
=, ==같음
!=같지 않음
<ASCII 알파벳 순서에 더 작음
>ASCII 알파벳 순서에서 더 큼
-z문자열이 NULL, 길이가 0인 경우
-n문자열이 NULL이 아님
${변수}문자열이 NULL이 아님

파일 비교(File test operators)

문자설명
-e파일이 존재
-f파일이 존재하고 일반 파일인 경우(디렉토리 혹은 장치파일이 아닌 경우)
-s파일이 존재하고 0보다 큰 경우
-d파일이 존재하고 디렉토리인 경우
-b파일이 존재하고 블록장치 파일인 경우
-c파일이 존재하고 캐릭터 장치 파일인 경우
-p파일이 존재하고 FIFO인 경우
-h파일이 존재하고 한 개 이상의 심볼릭 링크가 설정된 경우
-L파일이 존재하고 한 개 이상의 심볼릭 링크가 설정된 경우
-S파일이 소켓 디바이스인 경우
-t파일이 디스크립터가 터미널 디바이스와 연관이 있음
-r파일이 존재하고 읽기 가능한 경우
-w파일이 존재하고 쓰기가 가능한 경우
-x파일이 존재하고 실행 가능한 경우
-g파일이 존재하고 SetGID가 설정된 경우
-u파일이 존재하고 SetUID가 설정된 경우
-k파일이 존재하고 스티키 비트(Sticky bit)가 설정된 경우
-O자신이 소유자임
-G그룹 아이디가 자신과 같음
-N마지막으로 읽힌 후에 변경 됐음
file1 -nt file2file1 파일이 file2 파일보다 최신임
file1 -ot file2file1 파일이 file2 파일보다 예전것임
file1 -ef file2file1 파일과 file2 파일이 같은 파일을 하드 링크하고 있음
!조건이 안 맞으면 참(예: ! -e file)
profile
꿈꾸는 개발자

0개의 댓글