본문 바로가기
Linux

Shall Script Command - 1

by 개폰지밥 2019. 3. 5.
반응형

* 쉘 스크립트란?

쉘 스크립트는 기본적으로 시스템 명령어와 프로그래밍 구문으로 이루어져 있습니다.

쉘 프로그래밍을 사용하면 반복적인 작업을 자동화할 수 있습니다.

* 쉘 스크립트 실행방법

1) sh 명령어 사용

sh 스크립트파일

2) ./ 명령어 사용

chmod +x 스크립트파일

./스크립트파일

./로 쉘 스크립트를 실행하기 위해서는 chmod로 실행 권한을 먼저 줘야 한다.

* 쉘 스크립트 파일구조

# bash쉘을 이용해서 해석하겠다.

#!/bin/bash

...

exit 0

리눅스의 기본쉘은 bash쉘이다. 본쉘을 이용하려면 #!/bin/sh 로 하면 된다.

#은 주석이다. #!은 쉘 선언할 때 사용된다.

* 쉘 스크립트 실행시 오류 정검사항

1) 퍼미션 오류 : chmod +x [스크립트파일]로 실행권한을 부여해야 한다.

2) 찾지 못하는 이유: 스크립트의 저장위치가 $PATH에 속해있지 않으면 실행이 안된다.

해당위치를 $PATH에 추가하거나, 아니면 ~/[실행경로]를 입력하여 실행한다.

(~ 홈디렉토리는 기본적으로 $PATH에 속함)

* 쉘 스크립트 변수의 선언(할당) 및 참조

쉘에서 변수는 값을 할당 하면 바로 선언된다.

a에 3을 넣고 변수 a를 출력한다. a에 13을 재 할당하고 a를 다시 출력하는 쉘 스크립트를 만들어보았다.

* 변수

쉘 스크립트에서 사용하는 변수는 아래의 표와 같습니다.

종류

설명

환경 변수(Environment Variables)

쉘 환경과 관련한 정보를 저장하는 변수

쉘에 의해 정의되고 사용자가 변경가능

사용자 정의 변수(User Define Variables) 또는 프로그램 변수(Program Variables)

사용자가 정의해서 사용 가능한 변수

특수 변수(Special Variables)

쉘의 수행을 돕는 변수

쉘에 의해 설정되며 읽기전용으로 사용

위치 매개 변수 (Postional Parameter)

쉘 스크립트 수행 시 전달 받는 위치 아규먼트

1) 환경 변수

환경변수란 쉘 환경과 관련일반적인 프로그래밍 언어에서는 전역변수 혹은 global 변수라 불리는 것을 쉘 스크립트에서는 환경변수라 합니다. 환경변수는 export 명령을 사용하여 만듭니다.

사용자가 로그인을 할 때 읽어들이는 파일 중에 /etc/profile 파일이 있습니다. 이곳을 보면 다음과 같이 export로 환경변수를 만드는 것을 찾을 수 있습니다.

환경변수는 어디서나 불러들일 수 있는 변수입니다. 콘솔 창에서 현재 있는 위치에 상관없이 echo 명령으로 변수 값을 확인할 수 있습니다.한 정보를 저장하는 변수입니다. 로그인시에 쉘에 의해 초기설정 되며, 변수명은 모두 대문자로 작성합니다. 아래는 일반적으로 많이 사용하는 환경변수 목록입니다.

변수명

설명

PATH

쉘이 명령어를 찾을 때 참조하는 디렉토리 경로

HOME

로그인시 사용자의 홈디렉토리

PS1

쉘 프롬프트

TERM

터미널 이름

SHELL

쉘 종류

LOGNAME

로그인 사용자 계정

2) 사용자 정의 변수

일반적인 프로그램 언어에서 정의하는 방식과 유사하며 [변수명=값] 형식으로 사용됩니다. 변수명은 문자, 숫자, 언더라인(_)으로 구성할 수 있습니다. 사용자정의변수는 해당 쉘에서만 사용이 가능하고, 자식 쉘에서 사용하려면 export 구문을 이용할 수 있습니다.

3) 특수 변수

특수 변수는 현재 쉘을 확인하거나, 쉘의 프로세스 번호, 쉘 프로그램에 아규먼트로 전달 될 때 사용됩니다. Ex) $$, $?, $#, $-, $! 등

4) 위치 매개 변수

위치 매개 변수는 명령어의 옵션 또는 아규먼트와 같이 쉘 프로그래밍에서 사용하는 아규먼트입니다. Ex) $0, $1-$9

* 쉘 스크립트 내부 명령어

내부 명령어

설명

exit

쉘 스크립트 종료

continue

for, while, until 등의 반복문에서 사용

진행 중인 작업을 중단하고 반복문 처음으로 이동

break

for, while, until 등의 반복문에서 사용

반복문 종료 done 다음 명령 실행

return

쉘 함수 종료 시 결과 값 반환

read

표준입력에서 입력 받아 변수에 할당

-t: 시간값 -s: 비밀번호를 위한 시크릿 모드이다.

-t 10을 하면 10초 동안 입력이 없으면 else문이 실행된다.

expr

수식의 결과 출력

* read 옵션

-a array: 입력값을 array에 할당된다.

-d delimiter: delimiter 문자열에서 개행 문자가 아닌 가장 첫번째 문자를 입력의 끝을 가리키는데 사용한다.

-e readline을 이용하여 입력을 관리한다. 이것은 커맨드 라인과 같은 방식으로 입력 내용을 편집할 수 있게 해준다.

-n num: 입력된 행 전체 대신 num 수의 문자만을 읽어온다.

-p prompt: prompt문자열을 이용하여 입력을 위한 프롬프트를 띄운다.

-r raw : raw모드 백슬래시 기호를 이스케이프로 해석하지 않는다.

-s: 시크릿모드 문자를 입력할 때 표시 하지 않는다.

-t seconds: 일정시간 후에 입력대기를 종료한다.

-u fd: 표준 입력대신 fd파일 디스크립터를 입력으로 사용한다.

* 간단한 read 예제

read를 이용해서 입력한 나이를 불러오는 예제

vi readtest

readtest를 실행하면 나이를 입력할 수 있게 나온다.

나이를 입력해주면 read를 통해 표준입력에서 입력 받아 변수에 할당해준다.

* 쉘 스크립트에서 사용하는 제어문

1) if~then~fi 문

이 조건은 참인 경우에만 실행되는 구문입니다. 만약 ~ 라면 ~ 입니다와 같은 형태 출력.

if 조건

then

명령 1

fi

2) if~then~else~fi 문

만약 ~ 라면 ~ 이고. 아니라면 ~ 입니다.

if 조건

then

명령1

else

명령2

fi

3) if~then~elif~else 문

여러 가지 조건을 처리하기 위한 구문입니다.

if 조건

then

명령1

elif 조건

then

명령2

else

명령3

fi

* 논리 조건 연산

논리 연산자

설명

!

NOT 연산자 : 결과에 대해 반대값을 반환

-a

AND 연산자 : 결과가 모두 참이어야 true를 반환

-o

OR 연산자 : 결과가 하나라도 참이면 true를 반환

()

우선순위 연산

* if 문에 사용되는 조건식

[-z ] : 문자열의 길이가 0이면 참

[ -n ] : 문자열의 길이가 0이 아니면 참

[ -eq ] : 값이 같으면 참

[ -ne ] : 값이 다르면 참

[ -gt ] : 값1 > 값2

[ -ge ] : 값1 >= 값2

[ -lt ] : 값1 < 값2

[ -le ] : 값1 <= 값2

[ -a ] : &&연산과 동일 and 연산

[ -o ] : ||연산과 동일 xor 연산

[ -d ] : 파일이 디렉토리면 참

[ -e ] : 파일이 있으면 참

[ -L ] : 파일이 심볼릭 링크면 참

[ -r ] : 파일이 읽기 가능하면 참

[ -s ] : 파일의 크기가 0 보다 크면 참

[ -w ] : 파일이 쓰기 가능하면 참

[ -x ] : 파일이 실행 가능하면 참

[ 파일1 -nt 파일2 ] : 파일1이 파일2보다 최신파일이면 참

[ 파일1 -ot 파일2 ] : 파일1이 파일2보다 이전파일이면 참

[ 파일1 -ef 파일2 ] : 파일1이 파일2랑 같은 파일이면 참

* 위치매개변수(positional parameter)

스크립트나 함수로 넘어온 매개변수들!!!

$0, $1, $2, ... : 스크립트파일 호출 시 넘어온 인자를 차례대로 이렇게 참조하면 된다 !!!

쉘 스크립트를 작성하기 위해서는 많은 것을 알아야 하는데 그중 기초를 정리해봤습니다~

위에 적힌 것들 공부하고 쉘 스크립트 기초 -2 .... -n까지 공부하고 실제 쉘 스크립트를 이용해서 업무를 자동화합시다!


반응형

'Linux' 카테고리의 다른 글

Unix(AIX) VS Linux  (0) 2020.05.18
CentOS7 putty Connect Error  (2) 2020.02.11
Linux Basic Command - 1  (0) 2019.03.05
Linux Basic Command - 2  (0) 2019.03.05
Linux File 권한 살펴보기  (0) 2019.02.15

댓글