본문 바로가기

Computer Science/Embedded Software

[Embedded Software] Shell Script


+ 한국항공대학교 최차봉 교수님의 임베디드 SW 과목 내용을 정리한 글입니다.

Shell Script 사용법

1. vi [Shell Script]

: Shell Script 생성

 

2. vi로 Shell Script 작성- 상단에 #!을 작성하여 실행할 Interpreter 지정 

#!/bin/bash

 

3. chmod u(a)+x [Shell Script] 

: 실행 파일로 변경

 

4. [Shell Script] : Shell Script 실행

 

echo $PATH : PATH 변수 확인

PATH 변수를 변경하여 PATH 수정

ex) PATH="$PATH:."


터미널 시작 시 자동 실행

~/.bashrc : bash가 수행될 때 함수를 제어하는 지역 환경설정

 

=> .bashrc 파일의 하단에 echo $LOGNAME 추가 

 

+ !!는 "!!"으로 감쌀 수 없다. '!!'으로 사용해야한다. (!!는 반복을 나타내는 명령어)

 

+ 파일을 수정 후 source 명령어를 통해 저장해야한다. (중복 저장 주의)

=> source .bashrc


문자열을 그대로 출력

#!/bin/bash
echo "Hello, World!!"

대소문자 변환

문자열을 대문자로 변환

str="abc"
echo ${str^^} # 대문자로 변환

 

문자열을 소문자로 변환

str="ABC"
echo ${str,,} # 소문자로 변환

문자열 내 문자 변경

가장 먼저 나오는 문자 하나를 변경

str="abc-1-5"
echo ${str/-/:} # str 내 처음 등장하는 '-'를 ':'로 변경

 

등장하는 모든 문자를 변경

str="abc-1-5"
echo ${str//-/:} # str 내 모든 '-'를 ':'로 변경

명령 실행 결과를 변수에 저장하는 방법

1. $([명령어]) - 주로 사용

a=$(pwd) # 현재 경로를 변수에 저장
echo $a

 

2. $`[명령어]`

a=$`pwd` # 현재 경로를 변수에 저장
echo $a

Shell Script Parameter

$0 : Shell File Name

$1 : 1st Parameter ($2 : 2nd, $3 : 3rd ...)

$* : All Parameters

$# : Number of Parameters (인자 개수)


expr 명령어

- Shell Script에서 다양한 계산을 가능하게 한다.

 

입력 받은 두 수를 더해서 출력

echo $(expr $1 + $2)

if 문

if [ condition ]

then

    [ command ]

elif [ condition ]

then

    [ command ]

else

    [ command ]

fi

 

또는

 

if [ condition ]; then command; elif [ condition ]; then command; else [ command ]; fi

 

+ [ condition ] 공백 넣는 것을 유의해야한다.

 

Condition Options

리눅스 조건문 옵션

 

점수가 90점 이상이면 'Grade: A+' 표시

a=96
if [ $a -ge 95 ]; then echo "Grade: A+"; fi

 

첫 번째 인자가 짝수인지 홀수인지 표시

#!/bin/bash

if [ $(expr $1 % 2) -eq 0 ]
then
	echo "$1 is even"
else
	echo "$1 is odd"
fi

 

[ condition ] && command1 || command2

=> [condition]이 true면 command1, false면 command2를 실행한다.

[ $(expr $1 % 2) -eq 0 ] && echo "$1 is even" || echo "$1 is odd"

 

 

두 수 계산기 (단, 곱하기는 x로)

if [ "$2" == "x" ]
then
	res=$(expr $1 \* $3)
else
	res=$(expr $1 $2 $3)
fi

echo "$1 $2 $3 = $res"

+ *는 Linux에서 따로 해석되는 명령어이기 때문에 \를 따로 취해야 한다.


while 문

while [ condition ]

do

    command1

    command2

done

 

또는

 

while [ condition ]; do command1; command2; done

 

+ break : loop 종료

 

0부터 10까지 출력

nu=0
while [ $nu -le 10 ]
do
	echo "Number: $nu"
    ((nu++))
done

++, -- 연산을 사용할 때는 ((++)), ((--)) 괄호 2개를 사용해주어야한다.


배열 (Array)

arr=(item1 item2 ...) : 배열의 지정

$arr : 첫번째 요소

${arr[index]} : 배열의 index번째 요소 (index는 0부터)

${arr[@]} : 배열의 모든 요소

 

+ Shell Script의 배열은  숫자와 문자는 따옴표 없이 사용해도 자동으로 구분


for 문

for [ variable ] in [ array ]

do

    command1

    command2

done

 

또는

 

for [ condition ]; do command1; command2; done

 

1월 ~ 12월 영문 이름 출력

arr=(jan feb mar apr may jun jul aug sep oct nov dec)
# ""을 사용하지 않으면 자동으로 문자열로 저장 ("" 사용 가능)

i=1

for mon in ${arr[@]}
do
	echo "Month $i: $mon"
    ((i++))
done

텍스트 데이터 분리

cut [옵션] [파일명] : 텍스트 파일이나 텍스트 데이터에서 특정 열(필드) 또는 문자열을 추출한다.

 

-f : 열을 선택 (기본값: 공백)

ex) cut -f2,4 myfile.txt : 2번째, 4번째 필드추출

 

-d : 열 구분자를 지정 (기본값: 공백)

ex) cut -d ',' -f2 myfile.txt : ','로 구분된 2번째 필드 추출

 

-c : 특정 위치의 문자 추출

ex) cut -c1-5 myfile.txt : 첫 번째 문자부터 다섯 번째 문자까지 추출

 

+ 문자열 변수에서 추출할 때, $(echo [문자열] | cut ~) 이용

 

+ 열 구분자를 지정하여 문자열을 자를 때, 처음 나오는 구분자 앞에 있는 문자열이 첫번째 필드이다. 만약 처음 나오는 구분자 앞에 있는 문자열이 없다면 null을 반환하게 된다.