[centos] 쉘 스크립트

2019. 4. 3. 11:34study/centos 7 server & network

centos의 bash 쉘

# 명령어 [옵션][인자]



- 쉘 스크립트 프로그래밍


: c언어와 유사하게 프로그래밍이 가능하다.

: 변수, 반복문, 제어문 등의 사용이 가능하다.

: 별도로 컴파일하지 않고 텍스트 파일 형태로 바로 실행할 수 있다.

: 확장명*.sh

: 스크립트를 /usr/local/bin/ 디렉터리에 복사하고 755 권한을 주면 모든 사용자가 사용할 수 있다.

* 단, 이 작업은 보안상 root만 수행한다.


실행 방법

1. 

[root@localhost ~] # sh [스크립트 파일]


2. 

[root@localhost ~] # chmod +x [스크립트 파일]

[root@localhost ~] # ./[스크립트 파일]



ex) # name.sh

#!/bin/sh


echo "user's name : " $USERNAME 


exit 0


$USERNAME : 현재 사용자 이름


1. 변수 

: 사용하기 전에 미리 선언하지 않고, 변수에 처음 값이 할당되면서 자동으로 변수가 생성된다.

: 모든 변수는 문자열로 취급한다. 

ex) test=1  > '1'이라는 문자열로 취급

[root@localhost ~] # test=1

[root@localhost ~] # echo $test+1

1+1 


: 변수 이름은 대소문자를 구분해야한다.

: 변수를 대입할 때 = 좌우에 공백이 없어야 한다.

공백이 있을 경우

bash: test: =: unary operator expected 라는 오류가 뜬다.


: 공백이 있는 값을 하고 싶으면 " "으로 묶는다.

ex) test="hello world"


: $ 문자를 같이 출력하고 싶으면 \$를 사용한다.

[root@localhost ~] # echo "test \$USERNAME : " $USERNAME

test USERNAME : root



2. 숫자 계산

: 변수에 들어있는 값을 숫자로 해서 연산을 하려면 expr을 사용해야한다.

[root@localhost ~] # test=1

[root@localhost ~] # expr $test + 1

2


산술 : +, -, *, /, %

논리 : | , & 

비교 : =, <, <=, >, >=, !=


*, & , | , > , < , ( , ) 같은 경우 특수문자로 사용된다.

따라서, 연산에 사용하려면 \ 문자를 앞에 붙여서 사용해야한다. 



3. 파라미터 변수 

: $0 , $1 , $2 .... 의 형태를 가진다.

: 전체 파라미터는 $* 로 표현


# parm.sh

#!/bin/bash


echo "file name : " $0

echo "first parameter : " $1

echo "entire parameter : " $*


# 결과

[root@localhost ~] # ./parm.sh one two

file name :  ./parm.sh

first parameter :  one

entire parameter :  one  two



4. if

- 형식

 if [ 조건 ] 

    then

         참일 경우 실행 

    fi 


* [ 조건  ] 처럼 [ ]와 조건 사이에 빈칸이 꼭 들어가야 한다.  



4.1. 조건 (문자열)

문자열 = 문자열 : 두 문자열이 같으면 참

문자열 != 문자열 : 두 문자열이 같지 않으면 참

-n 문자열 : 문자열이 널이 아니면 참

-z 문자열 : 문자열이 널이면 참


4.2. 조건 (값, 수식)

A -eq B : A, B가 같으면 참

A -ne B : A, B가 같지 않으면 참

A -gt B : A > B이면 참 

A -ge B : A >= B이면 참

A -lt B : A < B이면 참

A -le B : A <= B이면 참


4.3. 조건 (파일)

-d : 파일이 디렉터리면 참

-e : 파일이 존재하면 참

-f : 파일이 일반 파일이면 참

-g : 파일에 set-group-id가 설정되면 참

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

-s : 파일 크기가 0이 아니면 참

-u : 파일에 set-user-id가 설정되면 참

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

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



5. case ~ esac

- 형식

case 변수 in

pattern [ | pattern ... ) ~~ ;;

. . .

esac


# case.sh

#!/bin/bash


echo "input : "

read input


case $input in

start) 

echo "input start"

stop) 

echo "input stop"

*)

echo "no"

esac

: 사용자 입력값을 받아서 start이면 "input start"를, stop이면 "input stop"을, 그 외이면 "no"를 출력한다.



6. for

- 형식

for 변수 in 반복 조건

do

. . .

done


* 반복 조건에 1, 2, 3.. 또는 $ls 등 여러가지 조건이 들어갈 수 있다.


# for.sh

#!/bin/bash


for i in 1 2 3 4 5 

do

echo $i

done

: 1부터 5까지 출력한다.



7. while

- 형식

while 값1 조건 값2

do

. . .

done


*이때 사용되는 조건은 if문에서 사용되는 조건과 같다.


# while.sh

#!/bin/bash


i=1

while [ $i -le 5 ]

do

echo $i

i=$(expr $i + 1)

done

: 1부터 5까지 출력한다.



8. until

- 형식

untile 값1 조건 값2

do

. . .

done


: while과 다르게 조건이 참이기 전까지 반복 


ex) 

1부터 5까지 출력하는 프로그램을 짤 때,

until [ $i -gt 5 ] 이다.

( i가 5보다 크기 전까지 )



+ break, continue, exit

break : 반복문을 종료한다.

continue : 반복문의 조건식으로 돌아간다.

exit : 해당 프로그램을 완전히 종료한다.



9. 함수

- 형식

함수이름 ()

{

. . . 

}


: 보통 () 안에는 아무것도 쓰지 않는다.

: 대신, $1, $2.... 형태로 파라미터를 받아서 사용한다.


- 함수 호출

함수 이름 [인자1] [인자2] . . .


# function.sh

#!/bin/bash

sum()

{

expr $1 + $2

}


sum 1 2

: 인자로 넘겨준 두 값을 더해서 출력한다.



10. set, $(명령어)

10.1. $(명령어)

: 리눅스 명령어의 결과를 변수에 저장하기 위해서 $(명령어) 형식을 사용한다.


# $.sh

#!/bin/bash


one=$(expr 1 + 1)

echo $one

: expr 1 + 1의 결과를 변수 one에 저장하고 출력한다.


10.2. set 

: 명령어의 결과를 파라미터로 사용하기 위해서 set과 함께 사용한다.


# set.sh

#!/bin/bash


set $(ls)

echo $3

: ls의 결과 가져와서 3번째의 값을 가져온다. 


ex) ls의 결과가 a, b, c이면  c를 출력한다.

'study > centos 7 server & network' 카테고리의 다른 글

[centos] ssh  (0) 2019.04.09
[centos] telnet  (0) 2019.04.09
[centos] 쿼터  (0) 2019.03.31
[centos] 하드디스크  (0) 2019.03.26
[centos] 서비스  (0) 2019.03.25