본문 바로가기

Server/Linux

[Linux] 쉘 스크립트 사용하기(변수 선언, 조건문 IF)

728x90
반응형

회사 업무 중 모듈 제작 작업 과정에서 반복된 커맨드를 작성하다 보니 그냥 스크립트 하나 만들어서 동작하는 게 효율적일 거란 생각이 들어서 생애 처음으로 쉘 스크립트를 작성해 보았다. 쉘 스크립트는 반복작업의 자동화와 컴파일 과정 없이 빠른 속도로 진행된다는 점의 장점이 있기에 만약 어떤 반복적인 작업이 있는 경우 사용하는 것을 추천한다.

 

쉘 스크립트를 활용한 업무 효율은 정말 좋았고 내가 사용하면서 느꼈던 쉘 스크립트에 사용하면 좋은 명령어와 기본 문법들을 알아보겠다.

 

 

 

 

 

1. 쉘 스크립트 생성

리눅스 서버 내 원하는 디렉토리에서 진행하면 된다.

 

# /home/test

vi test.sh

# test.sh

echo "Hello!"

 

우선 sh 확장자로 파일을 생성해준다. vi를 사용해 에디터를 활성화한 뒤 i를 입력해 INSERT 모드로 변경하고 간단하게 echo를 입력한 뒤 ESC 입력 후 :wq 를 입력해 저장하고 종료하면 된다.

 

# /home/test

chmod +x test.sh

# or

chmod 755 test.sh

 

파일이 생성이 되었다면 chmod를 사용해 실행 권한을 주자. 

 

 

# /home/test

./test.sh

 

쉘 스크립트 실행은 위와 같이 입력하면 실행이 된다. 그럼 Hello! 가 출력되는 것을 확인할 수 있을 것이다.

편집은 다시 vi 명령어를 통해 에디터를 활성화해주고 수해주면 된다.

 

728x90

 

 

 

 

 

 

 

 

 

2. 변수 선언 및 사용

변수 선언을 할 땐 '변수명=값' 형태로 선언해주면 된다. 주의할 점으로 공백 없이 선언을 해주어야 한다.

선언 후 사용을 할 땐 '$변수명' 형태로 사용해주면 된다. '${변수명}' 형태로 사용해 주어도 되고 따옴표 안에 넣든 넣지 않든 편한 대로 호출하여 사용해 주면 된다. 아래를 참고하자

# test.sh

echo "출력 =>"
echo ""

A="TEST1"
B = "TEST2"

echo "$A"
echo "${A}"
echo "$B"
echo $A
echo ${A}

 

 

변수 B 선언 시 '=' 옆에 공백을 둔 상태로 선언을 했더니 아래처럼 출력이 되었다. 꼭 붙여서 변수를 선언해주자.

# /home/test

./test.sh

출력 => 

./test.sh: line 2: B: command not found
TEST1
TEST1

TEST1
TEST1

 

 

문자는 큰따옴표를 사용하여 선언, 숫자를 선언할 땐 쌍따옴표 없이 선언해 주면 된다.

그리고 ``을 사용해 명령어를 변수에 선언해 줄 수 있다.

# test.sh

# 문자는 "" 사용
A="문자"  

# 숫자는 "" 미사용
B=1		  

# 명령어는 `` 사용
C=`cat ./test.sh`

echo $A
echo $B
echo $C

 

 

아래와 같이 출력되는 것을 확인할 수 있다.

# /home/test

./test.sh

문자
1
A="문자" B=1 C=`cat ./test.sh` echo $A echo $B echo $C



배열을 선언할 땐 아래와 같이 정의하면 된다.

# test.sh

A=("A1" "A2" "A3" "A4") # 문자 배열
B=(1 2 3 4 5)		# 숫자 배열

echo ${A[1]}    # 인덱스 1 출력
echo ${A[@]}	# 모든 인덱스 출력
echo ${A[*]}	# 모든 인덱스 출력
echo ${#A[@]}	# 배열 길이 출력

A[1]="A5"	# 인덱스 1 수정

echo ${A[*]}

 

 

정의할 땐 공백을 통해 배열 값을 정의되고 특정 인덱스 값을 수정할 땐 해당 인덱스에 값을 다시 넣어주면 된다.

위와 같이 작성하면 아래와 같이 출력이 될 것이다.

# /home/test

A2
A1 A2 A3 A4
A1 A2 A3 A4
4
A1 A5 A3 A4

 

 

변수를 숫자로 선언하고 해당 변수를 연산하는 방법은 아래와 같다.

# test.sh

# +, -, *, /, %
A=1

A=$((A+1))
echo $A

A=$[A+1]
echo $A

expr $A + 1

# 출력
2
3
4

 

연산을 할 때 $[] 또는 $(())를 사용하여 연산을 진행한다. expr을 사용하면 연산과 동시에 echo처럼 출력이 될 것이다.

 

반응형

 

 

 

 

 

 

 

 

 

 

 

2. 조건문 IF

쉘 스크립트에서의 기본적인 if 문 선언은 아래와 같다.

# test.sh

# 형식 => if [ 값1 조건식 값2 ]; then 실행문 fi
A=1
B=1

if [ $A -eq $B ]; then
        echo "Success!"
fi

 

 

else 또는 else if는 아래와 같이 선언하면 된다.

# test.sh

# 형식 => if [ 값1 조건식 값2 ]; then 실행문 elif[ 값1 조건식 값2 ]; then 실행문 else 실행문 fi
A=1
B=1

if [ $A -gt $B ]; then        # A가 더 클 경우
        echo "A is bigger"
elif [ $A -eq $B ]; then      # A B가 같을 경우 
        echo "A B is the same"
else                          # 위 조건에 해당하지 않을 경우
        echo "B is bigger"
fi

 

 

조건문 종류는 아래와 같다.

- 비교식

[ -z $A ] A 길이가 0이면 TRUE [ -n $A ] A 길이가 0이 아니면 TRUE
[ $A -eq $B ] A와 B가 같으면 TRUE [ $A -ne $B ] A와 B가 다르면 TRUE
[ $A -gt $B ] A가 B보다 크면 TRUE [ $A -ge $B ] A가 B보다 크거나 같으면 TRUE
[ $A -lt $B ] A가 B보다 작으면 TRUE [ $A -le $B ] A가 B보다 작거나 같으면 TRUE
[ 조건식A -a 조건식B ] 조건식이 모두 TRUE면 TRUE
&&(AND 연산) 와 동일 
[ 조건식A -o 조건식B ] 조건식 하나라도 TRUE면 TRUE
||(OR 연산) 와 동일

 

- 파일 관련

[ -e $A ] A가 존재하면 TRUE  [ -d $A ] A가 디렉토리면 TRUE
[ -f $A ] A가 파일이면 TRUE [ -S $A ] A가 소켓이면 TRUE
[ -L $A ] A가 심볼릭 링크면 TRUE [ -e $A ] A가 Special character file이면 TRUE
[ -r $A ] A 파일이 읽기 가능하면 TRUE [ -w $A ] A 파일이 쓰기 가능하면 TRUE
[ -x $A ] A 파일이 실행 가능하면 TRUE [ -s $A ] A 파일 크기가 0 보다 크면 TRUE
[ $A -nt $B ] A 파일이 B 파일보다 최신이면 TRUE [ $A -ot $B ] A 파일이 B 파일보다 오래되면 TRUE
[ $A -ef $B ] A 파일과 B 파일 같으면 TRUE [ !조건식A ] 조건식A 의 부정형 (NOT 연산)

 

 

 

파일 조건문은 쉘 스크립트를 실행하는 현재 디렉터리를 기준으로 경로와 파일 이름을 넣어주면 된다.

# test.sh

if [ -f ./test.sh ]; then
	echo "Exists File !!"
fi

 

 

만약 다른 디렉터리의 파일을 확인하고 한다면 cd 명령어를 통해 이동을 한 뒤 조건문을 진행해 주면 된다.

# test.sh

cd /home/test

if [ -f ./test.sh ]; then
	echo "Exists File !!"
fi

 

 

 

 

 

 

 

 

 

728x90
반응형