[Embedded] 리눅스 쉘 스크립트


리눅스 쉘 스크립트 작성에 대해서 알아보자.

우리가 기본적으로 사용하는 ShellScript는?


아참, ShellScript에 대해서 정리를 해야겠지?

ShellScript는 우리가 명령어를 입력하면 그 명령어를 실행할 때 어떻게 동작할지 정하는 스크립트이다.

쉘 스크립트의 확장자는 sh이다.

PC에서는 주로 Bash를 사용한다. Git Bash할때 그 Bash 맞다.

하지만 임베디드 환경에서는 주로 Dash라고 하는 쉘 스크립트 방식을 사용한다고 한다.

물론 Bash도 설치해서 사용이 가능하다!

  • Dash : 경량이며, 기능이 적다,
  • Bash : 기능이 많지만 무겁다.

차이점은 이렇게 둘 수 있겠다.


쉘 스크립트 작성해보기


모든 쉘 스크립트의 확장자는 .sh이다.

#! /bin/bash

echo "HI"

여기서 맨 윗 줄은 이 스크립트는 bash 스크립트임을 알리는 것이며,

Dash 방식으로 지정하고자 할 때에는 #! /bin/sh를 적어준다.

그리고 스크립트를 실행하고자 할 때에는 파일 이름을 a라고 해준다면 아래와 같은 명령어를 입력해준다.

source a.sh
./a.sh

그러면 쉘에 HI라고 출력이 된다.

쉘 스크립트 입출력

#! /bin/bash

echo "HI"
echo "What's Your Name?"

read ans

echo "HI " $ans

간단히 말하면 echo는 출력을, read가 입력받기를 담당한다.

read에 변수를 같이 써주고, 그 변수를 출력하고자 할 때에는 $를 붙인뒤 변수를 넣는다.

쉘 스크립트의 변수

#! /bin/bash

bbq=100
kfc=200

echo $bbq + $kfc

여기서 주의할 점!

위 스크립트의 결과물로 출력되는 것은 어떻게 될까?

결과는 100+200이다.

왜냐하면 쉘스크립트 변수는 기본적으로 문자열로 취급하지, 수로 취급하지 않는다!

그렇기 때문에 300이 아닌 100+200이 나오게 된다.

bbq = 100

그리고 변수를 지정할 때 위와 같이 스페이스가 있으면 안된다.

스페이스없이 붙여야 에러가 발생하지 않는다!

산술연산처리


그렇다면 우리가 원하는대로 100+200의 값이 300으로 출력되게 하고 싶다면?

echo $(( bbq + kfc ))

와 같이 띄어쓰기를 넣어주고, 괄호 두묶음으로 감싼뒤 앞에 달러표기를 붙이면 된다!

Argument 변수

#! /bin/bash

echo $1
echo $2

위 스크립트의 이름을 go 라고 했을 때,

명령어로

go HI WK

라고 한다면

HI
WK

와 같이 출력된다.

우리가 명령어로 ls a l 하는 것과 같이

argument 변수를 통해서도 입력을 받고, 이에 따라서 어떻게 행동할 지 결정을 할 수 있다.

위의 산술연산처리와 종합해서 아래와 같은 스크립트를 만들 수 있다.

!# /bin/bash

echo SUM VALUE IS $(( $1 + $2 ))

# 입력명령
source ./go.sh 100 200

# 결과
300

쉘 명령어를 변수로 넣기

#! /bin/bash

DATE=$(date)

echo $DATE "HI"

위와 같이 달러표시를 넣고 괄호로 한번만 감싸주면 쉘 명령어를 변수화 시킬 수 있다.

// 결과 예시
Sun 24 Sep 2023 05:04:09 PM KST HI


if문 사용하기

#! /bin/bash

a=KFC

if [ $a = "KFC" ] ;then
    echo "Chicken!"
else if [ $a = "HUT" ] ;then
    echo "Pizza!"
else
    echo "NO!"
fi

위와 같이 if문으로 사용할 부분은 대괄호로 감싸고, 끝에 ;then으르 붙여준다.

그리고 if문이 끝나면 fi로 감싸준다.

주의할 점은 띄어쓰기는 반드시 지켜주자!

비교연산자 사용하기

부등호, 등호 대신에 그 자리에 아래와 같은 명령어를 넣어야한다.

  • -lt : less than, ~보다 작으면
  • -gt : greater than, ~보다 크면
  • -eq : equal, 이것은 문자열 비교이지, 수 비교가 아니라는 것에 주의하라.
  • -ne : not equal, 같지 않다면
  • -ge : 크거나 같다.
  • -le : 작거나 같다.
반면, or과 and를 의미하는 와 &&는 똑같이 사용하면 된다.
# 예시

#! /bin/bash

a=5

if [ $a -gt 50 ] || [ $a -eq 5 ] ;then
    echo "LUCKY"
fi

결과물로 LUCKY가 잘 출력된다.

배열을 만들고 for문을 이용하기

소괄호를 이용해서 배열을 만들며, 중괄호를 이용해서 변수화 시킬 수 있다.

그리고 for문은 아래와 같이 사용한다.

!# /bin/bash

arr=(10 20 30)

for ((i=0; i<3; i++))
do
    echo ${arr[i]}
done

© 2022.07. by Wookey_Kim

Powered by Hydejack v7.5.2