반응형

 

쉘스크립트에서 if문을 사용할 때는 반드시 조건문을 사용하게 됩니다.

 

다양한 조건문이 있으며 크게 산술 비교 연산자, 파일 검사 연산자, 문자열 비교 연산자 이렇게 3가지로 나누어 있으며 아래 항목을 적어놨습니다.

 

 

산술 비교 연산자

val1 –eq val2 : equal, 변수 val1과 변수 val2 같은 경우 true
val1 –ne val2 : negative, 변수 val1과 변수 val2 다른 경우 true
val1 –gt val2 : greater then, 변수 val1이 변수 val2 보다 큰 경우 true
val1 –lt val2 : less then, 변수 val1이 변수 val2 보다 작은 경우 true
val1 –ge val2 : greater or equal, 변수 val1이 변수 val2 보다 크거나 같은 경우 true
val1 –le val2 : less or equal, 변수 val1이 변수 val2 보다 작거나 가은 경우 true
 

파일 검사 연산자

-a : 파일이 존재한 경우 true
-b : 파일이 존재하고 블록장치 파일인 경우 true
-c : 파일이 존재하고 캐릭터 장치 파일인 경우 true
-d : 파일이 존재하고 디렉토리인 경우 true
-e : 파일이 존재하고 파일이 있는 경우 true
-f : 파일이 존재하고 정규 파일인 경우 true
-g : 파일이 존재하고 SetGID가 설정된 경우 true
-h : 파일이 존재하고 한 개 이상의 심볼릭 링크가 설정된 경우 true
-k : 파일이 존재하고 Sticky bit가 설정된 경우 true
-p : 파일이 존재하고 FIFO인 경우 true
-r : 파일이 존재하고 읽기 가능한 경우 true
-s : 파일이 존재하고 0보다 큰 경우 true
-u : 파일이 존재하고 SetUID가 설정된 경우 true
-w : 파일이 존재하고 쓰기가 가능한 경우 true
-x : 파일이 존재하고 실행 가능한 경우 true
 

문자열 비교 연산자

-z string         : 문자열의 길이가 0인 경우 true
-n string         : 문자열의 길이가 0이 아닌 경우 true
string1 = string2 : 문자열 string1과 string2가 일치하는 경우
string1 != string2: 문자열 string1과 string2가 일치하지 않는 경우
string            : 문자열이 NULL이 아닌 경우

반응형
반응형

shell 스크립트에서 if 문은 대표적으로 사용하는 조건문입니다.

 

기본적인 형식은 아래와 같습니다

 

 if [ 조건문 ]

 then

   수행문 ...

 fi

 if [ 조건문 ]

 then

   수행문 1 ...

 else

   수행문 2 ...

 fi

 if [ 조건문 1 ]

 then

   수행문 1 ...

 elif [ 조건문 2 ]

 then

   수행문 2 ...

 else

   수행문 3

 fi

 

사용방법은 다른 언어들과 차이들이 없지만 중요한 점은 인터프리터 언어의 특성상 사용방법을 준수해 줘야 합니다.

 

 if^[^조건문^]

 

if문을 사용할 때는 위에와 같이 띄어쓰기를 해주어야 하는 점을 명심해 주시기 바랍니다. 예제를 통해 3가지 형식의 샘플을 보여드리겠습니다.

 

<Sample 1>

 #!/bin/bash

 A=10
 B=0
 echo "A=$A B=$B"
 if [ $A -gt $B ]
 then
   echo "A는 양수입니다"
 fi

 root@ubuntu:/shell# ./if.sh
A=10 B=0
A는 양수입니다

 

<Sample 2>

 #!/bin/bash

 A=5
 B=10
 echo "A=$A B=$B"
 if [ $A -gt $B ]
 then
    echo "A가 큽니다"
 else
    echo "B가 큽니다"
 fi

 root@ubuntu:/shell# ./if_1.sh
A=5 B=10
B가 큽니다

 

<Sample 3>

 #!/bin/bash

 A=5
 B=5
 echo "A=$A B=$B"
 if [ $A -gt $B ]
 then
    echo "A가 큽니다"
 elif [ $A -eq $B ]
 then
   echo "A와 B는 같습니다"
 else
    echo "B가 큽니다"
 fi

 root@ubuntu:/shell# ./if_2.sh
A=5 B=5
A와 B는 같습니다

 

감사합니다.

반응형
반응형

모든 프로그래밍 언어???는 변수를 통해서 데이터를 생성, 저장, 변경등을 하게 됩니다. 그만큼 처음 프로그래밍을 함에 있어서 가장 중요한 부분을 변수라고 볼수 있습니다. 보통 C언어나 JAVA의 경우에는 자료형이라는 이름으로 변수를 관리하게 됩니다. 보통 실수형, 정수형, 문자, 문자열 등으로 구분해서 사용하게 됩니다. 그런데 쉘 스크립트의 경우에는 변수에 자료형이라는 개념이 없습니다.

 

어쩌면 이부분이 다른 언어를 사용한 개발자들에게 생소한 방법이겠지만 생각해보면 간단합니다. C언어나 JAVA같은 경우에는 컴파일러를 통하기 때문에 사전에 컴파일러에게 이 변수의 사용목적을 알려주기 위해 사용이 됩니다. 그렇지만 쉘 스크립트는 아주 오래된 인터프리터 언어로서 Line By Line으로 실행이 되기 때문에 이런 과정이 있을 경우에는 실행 시간이 오래 걸리게 됩니다. 물론 요새 나오는 파이썬이나 다른 인터프리터의 경우는 아니지만요 ^^

 

그렇다면 가장 중요하게 생각해야 될 부분은 쉘 스크립트에서 변수를 사용함에 있어서 어떻게 사용하고 이용할 지 계획과 설계를 잘해야 개발 및 유지보수과정에서 어려움을 최소화 할 수 있습니다.

 

그렇다면 간단한 예제 코드를 보고 마무리 하도록 하겠습니다.

 

 #!/bin/bash

A=1234
string_1=hello
string_2='hello world'


echo "A : integer = $A"
echo "string_1 = $string_1"
echo "string_2 = $string_2"

 

아래코드는 정수형 및 문자열 2개를 샘플로 작성했습니다.

첫번째 줄은 어떤 쉘 스크립트를 사용할 지 지정해줍니다. 저는 가장 범용적인 bash를 이용했습니다. 쉘 스크립트는 역사만큼 다양한 종류에 쉘이 있으며 사용방법도 다양한 만큼 여기서는 가장 기본적인 bash 쉘을 기본으로 설명하도록 하겠습니다

 

변수를 대입함에 있어서 bash쉘에서는 절대 공백이 있어서는 안됩니다. 그렇게할 경우 실행과정에서  문제가 발생되는 만큼 유의해 주시기 바라며 나머지는 다른 프로그래밍 언어와 대동소이 합니다. 특이한 점은 perl에서 영향을 받은 점인데 선언할 때는 그냥 해당 변수를 선언해야 되지만 그 변수를 사용함에 있어서는 해당 변수명에 '$'를 붙여야 하는 점을 기억해주시기 바랍니다.

 

끝으로 스크립트 실행 결과 입니다.

 

 root@ubuntu:/shell# ./var.sh
A : integer = 1234
string_1 = hello
string_2 = hello world

 

 

 

반응형
반응형

쉘 스크립트 연재 순서

 

- 자료형

- 기본문법

. if

. switch

. while

. for

. until

- 파이프 라인

- 함수 선언 / 사용하기

- 문자열 다루기

. grep

. cut

. awk

- 사칙연산

- 쉘 스크립트 GUI

- 쉘 스크립트 예제

 

반응형
반응형

 다양한 리눅스 운영체제에서는 쉘 스크립트를 이용할 수 있도록 지원합니다. 쉘 스크립트는 다양한 기능들을 제공을 하며 이를 이용해야 리눅스 운영체제의 100% 퍼포먼스를 이끌어 낼 수 있습니다.

 

리눅스 쉘 스크립트의 장점단점을 한번 짚어보는 시간을 가져 보겠습니다.

 

리눅스 쉘스크립트의 장점은...

 

먼저 장점으로는 생산성을 꼽을수 있습니다. 리눅스에서 제공하는 다양한 명령어와 오픈소스를 이용해서 쉘 스크립트를 개발할 수 있습니다. 프로그램을 처음부터 개발할 경우에는 많은 시간과 노력이 필요하지만 다양한 오픈소스와 명령어를 이용하게 된다면 개발시간과 노력을 많이 줄일수 있습니다.

 

다음은 이식성으로 볼 수 있는데 쉘 스크립트는 다양한 운영체제에서 사용할 수 있습니다. 리눅스는 CentOS, Ubuntu 등 ... 다양한 운영체제가 존재하고 사용 목적에 따라 다양한 리눅스 운영체제를 선택해서 사용하게 되는데 쉘 스크립트는 특별한 경우를 제외하고는 바로 사용할 수 있다는 장점이 있습니다.

 

마지막으로는 다양성을 꼽을수 있습니다.  쉘 스크립트는 다양한 언어의 장점을 취합하여 같은 목적의 프로그램을 제작할 때라도 C스타일로도 개발이 가능하고 JAVA스타일로도 개발이 가능하며 정규식 및 오픈소스를 이용해서 개발자 별로 다양한 스타일로 개발이 가능합니다.

 

다음 리눅스 쉘스크립트의 단점은...

 

먼저 유지보수의 어려움 입니다. 개발자 별로 자기만의 색깔로 개발이 가능하기 때문에 다른 개발자가 이어서 유지보수를 할경우 소스코드를 파악하는데 어려움이 있습니다. 그래서 최초 개발시 주석을 효과적으로 달아야 할 필요가 있으며 유지보수를 위한 노력이 필요합니다.

 

다음은 디버깅의 어려움 입니다. 개발자라면 다들 이해할 수 있지만 개발하는 과정에서 많은 부분을 포함하는 부분이 디버깅 과정입니다. 아무리 사전에 잘 설계한 프로그램이라도 문제는 발생하기 마련인데 인터프리터 언어 특성상 디버깅에는 많은 어려움이 있습니다. 따라서 개발자들은 많은 경험을 통해 자신만의 디버깅 노하우를 축적하는 것이 중요합니다.

반응형

+ Recent posts