OSS - Shell Script

Pongchi·2022년 6월 10일
0

• 아래의 내용을 포함하는 쉘 스크립트 파일을 작성하세요 (파일 명: metro)
• 첫번째 역의 위치를 입력 받으세요
• 첫번째 역이 1이면, 순방향 (즉, st1, st2, st3 ..)
• 첫번째 역이 14이면, 역방향 (즉, st14, st13, st12 ..)
• 모든 역에서 go 또는 stop을 결정하세요
• Y 또는 y 인 경우 go, 다른 값은 script 종료 (“exit” 명령어 사용)
• St 5 번 역을 만나면 “exit”을 화면에 출력하고 script 종료
• “current station is st5 (exit)” 출력
• St 5 번 역이 아닌 경우 “ stay”을 화면에 출력하세요
• “current station is st1 (stay)” 출력
• 결과 화면 샘플은 다음 슬라이드에...

실습코드

[ 교수님이 보여준 코드.. ]

echo -n "select first station (st1 or st14): "; read first

if [ "$first" == "st1" ] ; then
	for station in st1 st2 st3 st4 st5 st6 st7 st8 st9 st10 st11 st12 st13 st14
    do
    	echo -n "go (y or Y): " ; read go
        if [ "$go" == "y" ] || [ "$go" == "Y" ]
        then
        	if [ "$station" == "st5" ] ; then
            	echo "current station is " $station "(exit)"
                exit
            else
            	echo "current station is " $station "(stay)"
            fi
        else
        	exit
        fi
    done
elif [ "$first" == "st14" ] ; then
	for station in st14 st13 st12 st11 st10 st9 st8 st7 st6 st5 st4 st3 st2 st1
    do
    	echo -n "go (y or Y):" ; read go
        if [ "$go" == "y" ] || [ "$go" == "Y" ]
        then
        	if [ "$station" == "$st" ] ; then
            	echo "current station is " $station "(exit)"
                exit
            else
            	echo "current station is " $station "(stay)"
            fi
        else
        	exit
        fi
    done
else
	exit
fi

Advanced Shell script

colorful

  • Vi editor에서 실행 언어 지정
    #!/bin/bash
    #!/bin/sh
  • 위의 작업을 하면 컬러풀해짐

break

for 또는 while 에서 다음 실행의 위치를 반복문의 종료 위치로 변경

Continue

for 또는 while 에서 다음 실행의 위치를 반복문의 처음 위치로 변경

무한 반복

for (( ; ; ))
do
	echo "Press CTRL+c to Stop"
done

while :
do
	echo "Press CTRL+c to Stop"
done

Using Function

  • 함수 body가 먼저 선언되어야 함
#!/bin/bash

function foo()
{
	echo "hello, world"
}

foo

  • 전역 변수와 지역 변수
#!/bin/bash

value="1234"

function foo()
{
	local value="5678"
    echo "2nd foo ${value}"
}

echo "1st foo ${value}"
foo
echo "3rd foo ${value}"

  • Argument
#!/bin/bash

value="1234"

function foo()
{
	local value=$1
    echo "2nd foo ${value}"
}

echo "1st foo ${value}"
foo 5678
echo "3rd foo ${value}"

결과는 위와 동일. 어쩃든 argument를 받을 땐, $1, $2, ...

$0 (예약) : 실행된 스크립트의 이름
$1 ~ $9
${10} ~ ${n}

  • Return value
#!/bin/bash

value="1234"

function foo()
{
	local value=$1
    echo "2nd foo ${value}"
}

echo "1st foo ${value}"
ret=$(foo 5678)
echo "${ret}"
echo "3rd foo ${value}"


실습코드에 함수 사용해보기

#!/bin/bash
echo -n "select first station (st1 or st14):"; read first

cur_station()
{
	echo -n "go (y or Y):" ; read go
    if [ "$go" == "y" ] || [ "$go" == "Y" ]
    then
    	if [ "$station" == "st5" ] ; then
        	echo "current station is " $station "(exit)"
            exit
        else
        	echo "current station is " $station "(stay)"
        fi
    else
    	exit
    fi
}

if [ "$first" == "st1" ] ; then
	for station in st1 st2 st3 st4 st5 st6 st7 st8 st9 st10 st11 st12 st13 st14
    do
    	cur_station
    done
elif [ "$first" == "st14" ] ; then
	for station in st14 st13 st12 st11 st10 st9 st8 st7 st6 st5 st4 st3 st2 st1
    do
    	cur_station
    done
else
	exit
fi

Calculation

expr command 을 이용하여 산술 연산을 수행함

  • 2개의 변수에 대한 연산 수행
  • 기본 연산
  • expr 명령어 사용시, 표현식 사이에 공백 분리
    Example: b=`expr $a + 10`

  • 문자열 계산

  • Special Character
    - $# : argument의 총 개수
    - $* : 전체 argument 값
    - $@ : 입력된 전체 argument 값을 하나씩 가져옴 (반복문에서 사용됨)
#!/bin/bash

echo $#
echo $*


Array in Shell Script

  • 1차원 배열만 지원

    배열 값 지정

    • array_test=("hello" "world" "shell" "script")

    배열 추가

    • array_test[4]="pongchi"

    배열 출력

    • echo "${array_test[2]}" // 특정 index
    • echo "${array_test[@]}" // 전체 index
    • echo "${#array_test[@]" // 배열 개수 출력

    특정 배열 지우기

    • unset array_test[2]
array_test=("hello" "world" "shell" "script")
array_test[4]="pongchi"

echo "${array_test[2]}"
echo "${array_test[@]}"
echo "${#array_test[@]}"

unset array_test[2]
echo "${array_test[@]}"

profile
- I'm going to be a ???

0개의 댓글