본문으로 바로가기

쉘스크립트

category Operating System/LINUX 2019. 3. 4. 04:05


쉘스크립트


* Shell script
*  for

 - for문은 조건문이 참이면 for문내의 명령을 반복한다.


 1. 기본 문법
---------------------------------------------------------------------------
#!/bin/bash

row="첫째 둘째"

for mon in $row;do

        for ((i=0;i<9;i++))do

                echo "$mon $i"

        done
done
---------------------------------------------------------------------------
 - 실행 결과
[root@TEST scripts]# ./test.sh
첫째 1
첫째 2
첫째 3
첫째 4
첫째 5
첫째 6
첫째 7
첫째 8
둘째 1
둘째 2
둘째 3
둘째 4
둘째 5
둘째 6
둘째 7
둘째 8
[root@TEST scripts]#

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

*  while

 - while문은 조건식이 참인 동안 while내의 명령을 반복합니다.
 1. 기본 문법


---------------------------------------------------------------------------
#!/bin/bash

row="$1"

while [ 10 -gt $row ];do

        echo "$row"
        row=`echo "$row" + 1 | bc`

done
---------------------------------------------------------------------------
 - 실행결과
[root@TEST scripts]# ./test.sh 3
3
4
5
6
7
8
9
[root@TEST scripts]#
---------------------------------------------------------------------------
스크립트는 임의의 값은 입력하여 입력한 값이 10보다 작다면 row 1 증가 시키며 while문을 반복한다.



테스트 연산자

 

[ ](대괄호) 안의 조건식에는 여러 종류의 테스트 연산자를 사용할 있으며, 연산자의 종류 기능은 다음과 같습니다..





*
다음 조건을 충족시킬 경우, true 리턴 -e : 존재하는 파일
-f :
보통 파일
-d :
파일이 디렉토리
-s :
파일 크기가 0 아님
-z :
문자열이 null. 길이가 0
-n :
문자열이 null 아님
-c :
파일이 문자 디바이스(키보드, 모뎀, 사운드 카드..)
-b :
파일이 블럭 디바이스(플로피나 CD)
-p :
파일이 파이프
-h :
파일이 하드 링크
-L :
파일이 심볼릭 링크
-S :
파일이 소켓
-t :
파일 디스크립터가 터미널 디바이스와 연관 있음
-r :
테스트를 돌리는 사용자가 읽기 퍼미션을 갖고 있음
-w :
테스트를 돌리는 사용자가 쓰기 퍼미션을 갖고 있음
-x :
테스트를 돌리는 사용자가 실행 퍼미션을 갖고 있음
-g :
파일이나 디렉토리에 set-group-id 플래그가 세팅되어 있음




가령 예를 들자면,





if [ -d /tmp ]; then     echo '/tmp 디렉토리가 존재합니다.'

else

    echo '/tmp 디렉토리가 존재하지 않습니다.'

fi

위와 같이 사용하면 됩니다..

 

파일과 관련한 연산자일 경우는 연산자 뒤에 파일명이, 디렉토리와 관련한 연산자일 경우는 연산자 뒤에 디렉토리명이 명시되어야 합니다..

 

다음은 산술 비교 연산자 문자열 비교 연산자입니다..

 

산술 비교 연산자 문자열 비교 연산자

-eq (equal) == 

-ne (not equal) !=

-gt (greater than)  

-ge (greater than or equal)  

-lt (less than)  

-le (less than or equal)  


산술 비교 연산자는 수치 비교를 위해 사용되며, 다음과 같이 사용됩니다..





if [ ${input} -eq 0 ]; then     echo 'input 값은 0 같습니다.'

else

    echo 'input 값은 0 같지 않습니다.'

fi




문자열 비교 연산자는 수치 비교를 위해 사용되며, 다음과 같이 사용됩니다..





if [ ${input} == "test" ]; then     echo 'input 값은 test 문자열과 같습니다.'

else

    echo 'input 값은 test 문자열과 같지 않습니다.'

fi




'$(달러)' 문자로 시작되는 값은 변수를 의미합니다..

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

 

(3) 논리 연산자

 

[ ](대괄호) 안의 조건식에 이상의 조건을 넣어야 경우 논리 연산자를 사용할 있으며, 연산자의 종류 기능은 다음과 같습니다..





-a : and, && -o : or, ||




논리 연산자의 사용법은 다음과 같습니다..





if [ 조건식1 -a 조건식2 ]; then     ~

else

    ~

fi




다들 알고 계시겠지만, and 논리 연산자의 경우 '조건식1' true 이어야지만 '조건식2' 넘어가며, '조건식1' false 경우 '조건식2' 체크없이 바로 else 구문으로 넘어가게 됩니다..

 

사용 예를 들자면, 다음과 같습니다..





if [ -f ${file1} -a -f ${file2} ]; then     echo 'file1 file2 모두 파일입니다.'

else

    echo 'file1 file2 모두 파일인 것은 아닙니다.'

fi

이상은 논리 연산자에 대한 사용법에 대해서 설명 드렸고, 다음은 자주 사용되는 연산자는 아니지만 추가로 덧붙입니다..

 

(4) 파일 생성 시기 비교 연산자

 

[ ](대괄호) 안의 조건식에 개의 파일 어떤 것이 먼저, 혹은 나중에 생성되었는지 알고자 경우 다음과 같은 비교 연산자를 사용할 있습니다..





f1 -nt f2 : f1파일이 f2파일보다 최신임(newer than) f1 -ot f2 : f1파일이 f2파일보다 예전것임(older than)




연산자에 대한 예시는 따로 들지 않겠습니다..

 

이상으로 if문에서 자주 사용되는 연산자들과 사용법에 대해서 알아보았구요..

 

예제 스크립트로 바로 넘어갈까 했는데 가지 설명드리고 예제 스크립트를 보여 드리는 편이 나을 같아서 잠깐 언급하도록 하겠습니다..

 

* Shell Script 에서 input 받아 처리하기

 

우리가 Shell Script 작성하다 보면 외부로부터 받은 input 값을 스크립트 내부에서 처리해야 하는 경우가 종종 발생하게 됩니다..

 

가령, ./test.sh [input_parameter1] [input_parameter2] 같은 식으로 말이죠..

 

위와 같이 외부로부터 받은 input 값은『 위치 매개변수 』를 통하여 처리하면 됩니다..





$1, $2, $3, ... : input_parameter1 $1 위치 매개변수로, input_parameter2 $2 위치 매개변수로 처리
$0 : 해당 Shell Script 이름




예를 들어, 스크립트로 넘어온 input 값이 0인지 아닌지 비교하는 스크립트(ex. number_compare.sh) 작성하고 싶다 하면 다음과 같이 하면 됩니다..





#!/bin/sh if [ $1 -eq 0 ]; then

    echo 'input 값은 0 입니다.' else

    echo 'input 값은 0 아닙니다.' fi




위와 같이 작성하고 다음과 같이 실행시키면 됩니다..






./number_compare.sh [숫자]






'Operating System > LINUX' 카테고리의 다른 글

Ubuntu root 계정 활성화  (0) 2019.03.04
lvreduce ext4 example  (0) 2019.03.04
Custom Kernel on Fedora 20  (0) 2019.03.04
Linux command  (0) 2019.03.04
Ubuntu Hostname 변경  (0) 2019.03.04