본문 바로가기

리눅스

[linux] 리눅스 셸 스크립트 파라미터 변수와 조건문

728x90

1. 파라미터 변수

 

파라미터 변수는 $0, $1...의 형태이며 실행하는 명령의 각 부분을 변수로 지정한다는

의미입니다.

 

예를 들어 apt-get install mc 라는 명령어가 있다면

$0에는 apt-get, $1에는 install, $2에는 mc가 저장됩니다.

 

명령 전체의 파라미터 변수는 $*로 표시합니다.

 

리눅스에서 터미널을 실행하고 sudo vi pa.sh 를 실행합니다.

그 후 다음 명령어를 입력합니다.

 

#!/bin/sh
echo "실행파일: <$0>"
echo "첫번째 파라미터: <$0>"
echo "두번째 파라미터: <$0>"
echo "전체 파라미터: <$*>"
exit 0

 

pa.sh는 $0에 저장되며 parameter는 $1, test는 $2에 저장됩니다.

$*을 하면 전체 파라미터인 parameter test가 출력됩니다.

 

2. 조건문

 

기본 if문은 if [ 조건 ] then fi와 같은 형식으로 작성합니다.

조건 안의 각 단어 사이에 공백이 있어야 합니다.

 

sudo vi shell_if.sh를 실행하고 다음 명령어를 입력합니다.

 

#! /bin/sh
if [ "linux" = "linux" ] 
then
   echo "True" 
fi
exit 0

 

2행 if문의 대괄호 안에는 참과 거짓을 구분하는 조건식이 들어갑니다.

"="는 값이 같은지 비교하고 만약 참이면 then 아래 있는 echo문을 출력합니다.

 

위 코드에는 조건이 참이기 때문에 True를 출력합니다.

 

리눅스에서 if else는 아래와 같이 작성합니다.

 

#! /bin/sh
if [ "linux" = "window" ] 
then
   echo "True" 
else
   echo "False"
fi
exit 0

 

위 코드는 거짓을 반환하므로 else아래 있는 echo문인 False를 반환합니다.

 

조건문에서는 문자열 비교와 산술 비교가 가능합니다.

조건문의 비교 연산자는 다음과 같습니다.

 

  • "문자열1 = 문자열2": 두 문자열이 같으면 참
  • "문자열1 != 문자열2": 두 문자열이 다르면 참
  • "-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이 작거나 같으면 참
  • "!수식": 수식이 거짓이면 참

 

문자열과 산술 외에도 파일 관련 조건을 지정할 수 있습니다.

파일 관련 조건은 다음과 같습니다.

 

  • "-d 파일명": 파일이 디렉터리면 참
  • "-e 파일명": 파일이 존재하면 참
  • "-f 파일명": 파일이 일반 파일이면 참
  • "-g 파일명": 파일에 set-group-id가 설정되면 참
  • "-r 파일명": 파일이 읽기 가능이면 참
  • "-s 파일명": 파일 크기가 0이 아니면 참
  • "-u 파일명": 파일에 set-user-id가 설정되면 참
  • "-w 파일명": 파일이 쓰기 가능이면 참
  • "-x 파일명": 파일이 실행 가능이면 참 

 

sudo vi file_if.sh를 실행하고 아래 코드를 작성합니다.

 

#! /bin/sh
filenm=/lib/systemd/system/cron.service
if [ -f $filenm ]
then
	head -3 $filenm
else
	echo "failed"
fi
exit 0

 

-f는 파일이 일반 파일일 때 참을 반환하는 조건입니다.

cron.service는 일반 파일이므로 then아래 있는 head 명령어를 실행합니다.

 

if문 외에도 case esac문이 있는데,

if문은 참과 거짓 두 가지 경우에만 사용하는 반면

case문은 경우의 수가 셋 이상 가능합니다.

 

sudo vi case1.sh를 실행하고 아래 코드를 작성합니다.

 

#! /bin/sh
case "$1" in 
    start) 
	echo "start";;
    stop)
	echo "stop";;
    restart)
	echo "restart";;
    *)
	echo "";; 
esac 
exit 0

 

case는 조건문이 끝날 때 항상 세미콜론을 넣어줘야 합니다.

조건) 실행할 코드 와 같이 구성되어 있으며, " * "은 if문의 else처럼 동작합니다.

 

조건문에서 관계 연산자는 다음과 같습니다.

 

  • And: -a 또는 &&
  • Or: -o 또는 ||

 

또한 정규표현식을 사용해 [nN]*처럼 특정 문자가 들어간 모든 단어를

참으로 반환할 수 있습니다.

728x90
반응형