Bash - shell script

 

쉘 스크립트를 쓰는 이유

1. 자동화 2. 심플하다 3. 공유가 가능 4. 간단한 인터페이스를 만들 수 있음 5. 새로운 명령어 만들 수 있음 6. compile없이 빠르게 처리 가능

 

shell script interpreter(쉘 스크립트 해석기) : 여러가지 종류가 있다 -> Linux에서는 Bash를 사용

 

쉘 스크립트 문법, 함수

# - 주석처리 -> bash스크립트 만들 시 첫 줄에 #! /bin/bash 라고 써주는데 이것은 주석이 아님(배쉬에의해 실행되는 스크립트라는 표시)

 

\ - 다음 라인으로 넘김, 전 줄과 다음줄을 연결

 

; - 여러개의 명령어를 순차적으로 표현

 

$ - 변수임을 나타냄

 

&& - 하나의 명령이 실행되면 다음 명령어를 실행

 

|| - 하나라도 실행 되면 바로 끝냄

 

! - NOT

 

1. 순차적 실행

2. 정상적으로 동작을 해야 다음단계로 넘어갈 수 있음

3. 정상적으로 동작이 안되면 계속 실행

 

echo 'hello' - hello를 print

 

chmod + x - 실행가능한 속성으로 바꿔줌 - 명령어처럼 사용가능

 

함수 예제

 

Command

 

 

 

rm,ls,df,vi,gzip -> /usr/bin

 

cd,pwd,echo -> bash 스크립트

 

Command Substitution : 명령어의 결과를 다른 명령의 일부로 사용가능

 

명령어를 backtick 마크사이에 위치 : `...`

명령어를 $() 사이에 위치

 

Variables 

 

 

변수 이름을 참조할때는 $기호를 변수앞에 붙임

 

변수 값을 대입하거나 수정시에는 $기호를 사용하지 않음

 

HOME,PATH,HOST와 같은 표준 환경변수도 일반 변수와 동일하게 사용됨

 

환경변수는 env.set.printenv 명령으로 얻을 수 있음

 

exporting Variables : 스크립트 내에서 선언된 변수는 스크립트 안에서만 유효함

    자식 프로세스가 변수를 접근하도록 하기 위해서는 export를 명시적으로     해야 함

ex) export VAR=value

 

script parameters : 스크립트에 파라미터를 전달할 수 있음

 

ex) $ ./script.sh /tmp <- tmp라는 값을 전달

     $ ./script.sh 100 2000 <- 100, 2000 두 파라미터를 전달

 

 

$0 : 스크립트 이름

$1 : 첫번째 파라미터 그 후는 $2, $3 ...

$* : 모든 파라미터

$# : 파라미터의 개수

$? : 값 리턴

 

예제

#! /bin/bash

 

echo -n "Enter your name"

read sname

echo "hello $sname. You are wonderful!"

 

조건문 - if statement

 

if 조건 -> [ 조건 ] 대괄호 안에 조건을 넣는다 공백에 주의

then

할것

elif 조건

then

할것

else

할것

fi

 

 

 

Numerical tests

 

-eq : 같은지

-ne : 다른지

-gt : 왼쪽이 오른쪽보다 큰지

-lt : 왼쪽이 오른쪽보다 작은지

-ge : 같거나 큰지

-le : 같거나 작은지

 

Arithmetic expression : 산술 연산을 하기 위해 사용하는 것

 

ecpr 유틸리티 사용 : echo $(ecpr 8 + 8)

 

$((...))를 사용 (가장 자주 사용됨) : echo $((x+1))

 

let을 사용 : let x=(1 + 2) ; echo $x

 

반복문 : for, while, untile

 

for loop : for 변수이름 in list \ do...    ... \ done

 

 

while loop : while 조건(참인동안 반복, 거짓이면 중단) \ do...    ... \ done

 

until loop : until 조건(거짓인동안 반복, 참이면 중단) \ do...    ... \ done

 

'임베디드SW공학' 카테고리의 다른 글

[6주차]Linux/Unix System Programming  (0) 2018.11.01
[5주차]git  (0) 2018.10.16
[4주차]make  (0) 2018.10.07
[3주차]GCC&library  (0) 2018.10.07
[1주차]Linux Terminology  (0) 2018.09.26

+ Recent posts