Linux

Linux 셀 스크립트 프로그래밍

owo_v 2020. 9. 28. 17:09

< 변수의 기본 >

1.  변수를 사용하기 전에 미리 선언하지 않으면, 처음 변수에 값이 할당되면 자동으로 변수가 생성

2. 변수에 넣는 모든 값은 문자열로 취급

3. 변수 이름은 대소문자를 구분

4. 변수를 대입할 떄 '=' 좌우에는 공백x

 

ex) test=one / test="one two' -> 변수의 값에 공백이 있을 시 ""로 묶어야한다

$ 출력 -> ''로 묶어주거나 \를 앞에 붙여줘야한다

 

< 숫자계산 >

연산을 하기 위해선 역따옴표( ` )로 묶어야 하며, 앞에 expr 키워드를 사용해줘야한다

ex) 'expr $num1 + 200`

 

< 파라미터 변수 >

$0, $1, $2 등의 형태

dnf -y install gftp -> $0 : dnf $1 : -y $2 : install $3 : gftp  / 전체 파라미터 : $*

 

< i f >

-기본 if 

if [ 조건 ]           -> 조건문을 쓸 때 각 단어에는 모두 공백이 있어야한다 ex) [ "woo" = "woo" ]

  then 

     참일 경우 실행

fi

-if~else문 

if [ 조건 ]          

  then 

     참일 경우 실행

  else

     거짓일 경우 실행

fi

-비교연산자

"문자열" = "문자열" : 두 문자열이 같으면 참

"문자열" != "문자열" : 두 문자열이 같지 않으면 참

-n "문자열" : 문자열이 NULL이 아니면 참

-z "문자열" : 문자열이 NULL이면 참

-산술연산자 

수식1 -eq 수식2 : 두 수식이 같으면 참

수식1 -ne 수식2 : 두 수식이 같지 않으면 참

수식1 -gt(>) 수식2 : 수식1이 크다면 참

수식1 -ge(>=) 수식2 : 수식1이 크거나 같으면 참

수식1 -lt 수식2 : 수식1이 작으면 참

수식1 -le 수식2 : 수식1이 작거나 같으면 참

!수식 : 수식이 거짓이면 참

 

< case ~esac문 >

case "$1" in

1)

  ~~~ ;;  -> 뒤에 세미콜론 2개를 꼭 붙여야한다

2)

  ~~~ ;;

esac

 

< 반복문 >

-for ~in문

for 변수 in 값1 값2 값3 .... 

do

   반복할 문장

done

-while문

while [ 조건문 ] 

do

   반복할 문장

done

< 사용자 정의 함수 >

함수이름( ) 

{

     내용 

}                 ->함수정의

함수이름       ->함수호출

 

< 예제 >

while을 이용한 num1~num2의 합

#!/bin/sh

hap=0
num1=`expr $1`
num2=`expr $2`
i=$num1

while [ $i -le $num2 ]
do
hap=`expr $hap + $i`
i=`expr $i + 1`
done
echo "$num1부터 $num2까지 합 : " $hap
exit 0
[root@localhost ~]# vi while.sh
[root@localhost ~]# sh while.sh 10 15
10부터 15까지 합 :  75

특정 수 범위

#!/bin/sh

num=`expr $1`

if [ $num -lt 10 ]
then
   num=1
else
  if [ $num -lt 100 ]
  then
    num=2
  else
    if [ $num -lt 1000 ]
    then
      num=3
    else
       num=4
  fi
 fi
fi

case $num in
 1)
   echo "10보다 작음";;
 2)
   echo "100보다 작음";;
 3)
   echo "1000보다 작음";;
 *)
   ehco "1000보다 큼";;
esac

exit 0
[root@localhost ~]# sh while2.sh 104
1000보다 작음

특정 값 입력에 대한 연산

#!/bin/sh

if [ $1 = e ]
then
echo "프로그램 종료"
exit 0
fi


num1=`expr $1`
num2=`expr $3`

case $2 in
    +)
      echo "$num1 + $num2 =" `expr $num1 + $num2`;;
    -)
      echo "$num1 - $num2 =" `expr $num1 - $num2`;;
    \*)
      echo "$num1 \* $num2 =" `expr $num1 \* $num2`;;
    /)
      echo "$num1 / $num2 =" `expr $num1 / $num2`;;
esac
[root@localhost ~]# sh calc.sh 1 + 2
1 + 2 = 3
[root@localhost ~]# sh calc.sh e
프로그램 종료
[root@localhost ~]# sh calc.sh 2 - 1
2 - 1 = 1
[root@localhost ~]# sh calc.sh 2 / 1
2 / 1 = 2
[root@localhost ~]# sh calc.sh 2 \* 1
2 \* 1 = 2