고급 개발자로 가는 길

OS/Linux

shell script

다크엔지니어 2020. 5. 8. 09:08
반응형

linux 에서 엄청 유용하게 쓰이는 shell script 에 대하여 간단하게 정리를 해볼까 한다.

크게 쓰이는 용도는 여러 명령어나 빌드 과정 등을 sh 파일로 만들어 sh 만 빌드하여 복잡한 과정을 매우 간한하게 만들 수있다.

뿐만 아니라 Makefile 을 만들때도 shell script 와 매우 흡사하다. 완전 같지는 않고..

 

 

초기 시작

시작은 vi 등의 에디터로 열어주면 된다.

그 다음 #!/bin/bash 로 설정을 해주어야 한다. bash shell 로 선택을 한다는 의미이다.

프로그래밍 언어에서 처럼 매크로를 설정해 줄 수 있는데  shell script 에서는 #define 이 아닌

TARGET=10 처럼 해준다. 단, 공백이 있어선 안된다.

 

문법

나머지 if else for while case 문을 사용 할 수 있는데 의미는 타언어와 동일하지만 문법면에서 조금 차이가 있다.

if

-b -eq 과 같이 여러 명령옵션을 제공한다. 너무 많아서 자주사용하는것을 제외하곤 외우기가 쉽지않다.

if [ $1 == a ]; then
 	echo " if success"
else
	echo " else success"
fi    

if [ $1 -eq $2 ]; then
	echo " eq success"
fi

if [ $1 -b ]; then
	echo " $1 Block Device"
fi

 

아래는 if 문 명령어 옵션이다.

 

for

for 문은 do done 사이의 것들을 반복하여 실행하며 i 변수를 12345 만큼 반복한다.

for i in 1 2 3 4 5 do
	echo ${i[*]}
done

 

while

아래와 같이 while 문도 사용가능하다. 아래는 ls 목록을 출력하며 그 관계처리로 num 을 이용하여 greater equir 을 사용한거다. 숫자 계산을 위해서는 `expr ` 을 사용해 주면된다.

list=$(ls)
index=0
num=${#list[@]}
while [ $num -ge 0 ]; do
	echo ${list[$index]}
    index=`expr $index + 1`
    num=`expr $num - $index`
done

 

case

제어문으로 아래와 같이 사용한다. switch case 문과 같다고 보면된다.

var=$1
case $var in
	bin)
    echo " bin "
    ;;
    *)
    echo " * "
    ;;
esac    

 

위와 같은 문법과 리눅스 명령어들을 혼합하여 매우 복잡한 과정을 한파일만 빌드하여 매우 쉽게 만들 수 있다.

물론 함수로 만드는 것도 가능하다. 현업에서도 매우 자주 쓰이며 꼭 알아두어야 한다. 보통 푸싱할때 필수로 쓰인다.

sdcard 에 uboot zImage rootfs 등을 밀어 넣으며 그전에 sdcard 마운트 관련까지 shell file 로 만들어 놓으면 매우 편리하다.

shell script 를 잘 쓰려면 결국 linux 명령어를 매우 잘 알아야 효율적으로 잘 쓸 수 있는것 같다. 

mount 를 해제하고 fdisk 로 partition 을 만들고 한다

아래는 partition  을 만드는 과정을 간단하게 해보았다.. 대충 이런느낌 이라고 보면된다.

partition_add()
{
	echo n
    echo p
    echo $1
    echo $2
    echo $3
}

sdcard_format()
{
	(
	echo d
    echo 5
    echo d
    echo 4
    echo d
    echo 3
    echo d
    echo 2
    echo d
	
    partition_add 1 2048 124144
    partition_add 2 2048+124144 124124124
    partition_add 3 2048+124144+124124124 214912051124
    ) | fdisk /dev/sdb 
}
반응형

'OS > Linux' 카테고리의 다른 글

커널을 분석해보자  (0) 2020.05.19
uboot 모드 작업하기  (0) 2020.05.09
UBI 혼자 끄적  (1) 2020.04.29
임베디드 리눅스의 구조  (0) 2020.04.25
Oracle, Ubuntu 18.04 Install  (0) 2020.04.11