Shell script 쉘 스크립트 1

조민철·2024년 6월 13일
1

Shell script

목록 보기
3/4

Shell script 쉘 스크립트 란?

리눅스 명령어들을 한 파일에 모아놓고 인터프리터가 한줄씩 해석하는 파일이다. 스크립트파일을 만들고 실행권한을 할당해야 실행이 가능하다. 스크립트는 위에서부터 하향식으로 실행된다.

#!/bin/bash
#a.sh

time=`date + %Y%m%d`
echo $time

다음 위 코드는 date 명령어를 사용하여 연월일 형식으로 time이라는 변수에 저장후 time 변수를 출력하는 스크립트이다. 위와같이 명령어들을 집합처럼 한파일에 모아두고 실행이 가능하다.

Sub Shell

쉘 스크립트 맨 첫줄에 #!/bin/bash라는 구분이 있는데 이부분은 서브 쉘스크립트를 실행할 쉘을 지정해 줄 수 있다. 즉, 서브쉘은 쉽게 말해 쉘 안에 또다른 쉘을 실행할 수 있다. 다음 그림과 같이 /bin 디렉토리에 여러 쉘들이 존재하는데 쉘안에서 또다른 쉘을 실행할 수 있다. 그리고 exit로 나와서 그 전 쉘로 돌아가는것이 가능하다.

Array 배열

쉘 스크립트도 타언어(C, Java)와 같이 자료구조중 배열이라는 자료구조가 존재하는데 사용법을 알아보겠다.

배열선언법

배열을 선언하는 방법은 배열명=(A1 A2 A3 A4) 형태로 이루어져 있다. 이때 중요한 점은 () 소괄호 안에 요소를 넣는다는것이다. 또한 문자와 숫자를 한배열에 넣을수 있다.

ARRAY=("A1" "A2" "A3" "A4" "A5")
lang=("C" "JAVA" "GO" "C++")

또한 배열의 요소를 따로 지정도 가능하다.

ARRAY=("A1" "A2" "A3" "A4" "A5")
lang=("C" "JAVA" "GO" "C++")

ARRAY[0]="A5" # ("A5" "A2" "A3" "A4" "A5")
lang[3]="Javascript" # ("C" "JAVA" "GO" "Javascript")

그리고 변수의 값을 배열의 요소에 지정도 가능하다.

arr="A1 A2 A3 A4 A5"
ARRAY=($arr) # ARRAY=("A1" "A2" "A3" "A4" "A5")

배열 출력법

배열을 출력하는 방법은 간단하다 echo ${배열명[인덱스번호}형태로 출력을 해주면 된다. 단, bash 쉘은 0부터 시작하고 z쉘은 1부터 시작한다

ARRAY=("A1" "A2" "A3" "A4" "A5")
lang=("C" "JAVA" "GO" "C++")

echo "{ARRAY[0]}" # A1
echo "{lang[1]}" # JAVA

----------------------
# zshell
echo "{ARRAY[1]} # A1"
echo "{lang[1]}" # C

다음과 같이 실행된다.

또한 @, * 같이 특수문자를 쓰면 모든 배열을 출력한다.

arr=(1 2 3)
echo $arr # 1 2 3
echo $arr[@] # 1 2 3
echo $arr[*] # 1 2 3

Test 명령문

test 명령은 파일의 존재유무/타입/권한/비교 등을 체크할 때 사용한다. 또한, 주로 조건문이 들어가야할 위치에 test가 들어간다.test의 출력은 주로 참(True) 거짓(False)로 출력되는데 c언어와 반대로 출력이된다.
c -> 0(거짓) 1(참)
shell -> 0(참) 1(거짓)

echo $?

$?는 직전 실행한 명령의 종료 상태 값을 확인할 수 있다.
0은 참으로 성공을 의미를 의미한다 0이외의 숫자는 명령이 실패했음을 의미한다.

Test 명령문 사용법

test 명령문은 test [파라미터] 또는 [ 조건 ]으로 사용할 수 있다. 주의할 점은 대괄호를 사용할 때는 꼭 양쪽 끝에 공백을 추가해줘야 한다.

a=1
test a -eq 3 # a와 3이 같은지 확인하는 파라미터
echo $? # 1 거짓

-----------------------------------------

a=1
[ a -eq 3 ] # test a -eq 3 과 같은 표현이다.
echo $? # 1

Test 파라미터 종류

파라미터의미
-z문자열의 길이가 0이면 참
-n문자열의 길이가 0이 아니면 참
-eq값이 같으면 참
-ne값이 다르면 참
-gt값1 > 값2
-ge값1 >= 값2
-lt값1 < 값2
-le값1 <= 값2
-aand 연산
-oxor 연산
-d파일이 디렉토리면 참
-e파일이 존재하면 참
-L파일이 심볼릭 링크면 참
-r파일이 읽기 가능하면 참
-s파일의 크기가 0보다 크면 참
-w파일이 쓰기 가능하면 참
-x파일이 실행 가능하면 참
profile
엔지니어로 살아남기

0개의 댓글

관련 채용 정보