서버/리눅스

[리눅스] 쉘 스크립트

장동규 2017. 4. 3. 21:46

#쉘 스크립트

명령어의 자동화 작업을 실행한다.


#1 작성방법

#>vi <script_name>.sh : 리눅스 파일뒤에 붙여주는것은 확장자가 아니라 사용하기 편함이다.


#2 실행

#>sh <path>



실습)

#>touch script1.sh

#>vi script1.sh

echo "hello"

#>sh script1.sh



쉘스크립트안에는 해석하는 파일의 경로를 넣어놓습니다.

#! /bin/bash

하지만 기본값이 #! /bin/bash이므로 안써줘도 상관없습니다.


#3 변수

쉘스크립트 안에 변수도 작성할 수 있다.

변수 작성도 하나의 커멘드라고 생각하면된다.

@선언된 변수는 $(메타문자)를 앞에 붙여서 사용한다.




#4 자료계산

결과값의 명령어 expr을 사용해서 변수에 지정한다

ex) num1=10;

num2=20;

result=`expr $num1 + $num2`

echo $result




간단한 사칙연산하는 스크립트도 이렇게 만들수 있겠네요.


#5 아규먼트(파라매터, 인수인자, ...)

변수이름을 숫자로 하면 안되는 이유

숫자변수에는 각각의 의미가 있다.

$0    :    쉘 스크립트 이름

$1~  :    스크립트에 주어진 아규먼트들



더쉽게 사칙연산을 만들 수 있겠네요.


$#   :    주어진 아규먼트의 갯수

$*    :    입력한 아규먼트 전부 출력

$$   :    쉘에서 실행시 사용된 프로세스ID 출력

$!    :    쉘에서 실행시 사용된 백그라운드 프로세스ID 출력

$?   :    함수의 반환값



#6 조건문

아규먼트에 숫자가 안들어오면 에러

op변수에 *가 그대로 들어가면 에러(*같은 경우 와일드카드로 동작할 수 있기에 \*로 사용해야 사칙연산이 가능하다)

.... 많은 에러들이 발생할때 에러처리를 방지하거나 특정한 조건에 다른동작을 하게 해줍니다.


#>cat /etc/profile : /etc/profile에 조건문에 대한 정보가 들어있다

if [ 조건 ] then

command

exit

elif [ 조건 ] then

command

exit

else

command

fi


>> elif같은경우 몇개를 작성해도 상관없으며 elif와 else는 생략이 가능하다.


#숫자 크기 비교

[ $A -gt $B ] : A값이 B값보다 크다

[ $A -lt $B ] : A값이 B값보다 작다

[ $A -ge $B ] : A값이 B값보다 크거나 같다

[ $A -le $B ] : A값이 B값보다 작거나 같다

[ $A -eq $B ] : A값과 B값이 같다

[ $A -ne $B ] : A값과 B값이 다르다


#문자열 비교하기

[ "string" = "string" ] : 두 문자열이 같은 경우

[ "string" != "string" ] : 두 문자열이 다른 경우

[ -z "string" ] : 문자열의 길이가 0인 경우

[ -n "string" ] : 문자열의 길이가 0이 아닌 경우


#파일 비교하기

[ -d path ] 파일이 존재하고, 디렉터리

[ -f path ] 파일이 존재하고, 일반파일




#7 반복문

for    변수    in    list

command....

done 


list들에는 몇개든 상관없는 데이터가 들어갈 수 있다.

변수의 값을 이용해서 출력, 계산을 할 수있다.




while [ 조건 ]

do

command

done


조건이 참인경우 실행되는 반복문




3) while

while [ 조건문 ]

do

command

done


i=1

while [ $i -le 10 ]

do

echo "$i"

i=`expr $i + 1`

done


ex) guest1 ~ guest30 사용자를 생성

ex) 쉘스크립트

1. 그룹 team1, team2 생성

2. useradd.sh 스크립트 생성

스크립트가 실행되면

team1 - it1 ~ it20

team2 - it21 ~ it40

(기본그룹X, 그룹추가!!)

구성원이 되도록 사용자를 생성