반응형

변수 선언

(1) 내부 변수

 변수 할당 시, 변수=값 이런식으로 변수에 할당해야한다.

이런식으로 정의 시 변수=값 사이에 space가 있으면 안된다.

#!/bin/bash

h="Hello"
b="world"
echo "${h},${b}"

출력화면: Hello,world

(2) 외부 변수

export 키워드를 사용하여, 외부변수를 선언할 수 있다.

외부 변수는 다른 프로그램에서도 사용 가능하다. 즉, 다른 스크립트에서 사용할 수 있다.

쉽게말해 전역변수라고 생각하면 좋다.

 

터미널에서 아래와 같이 TE 변수를 export로 선언해보자

export TE="123"

 

test.sh

#!/bin/bash
echo $TE

./test.sh 로 실행하자.

 

출력하면

123

 

 

(3) 매개변수 활용

test.sh

#!/bin/bash

echo "script name:${0}"
echo "매개변수 갯수 :${#}"
echo "전체 매개변수  값 : ${*}"
echo "전체 매개변수 값2 : ${@}"
echo "매개변수 1 : ${1}"
echo "매개변수 2 : ${2}"

 

$0  : 현재 쉘 스크립트의 이름 
$# : 위치 매개변수의 총 개수
$*  : 모든 위치 매개변수
$@ : 큰 따옴표를 사용하였을 때를 제외하고는 $*와 동일한 의미
$1 ... ${10} : 사용가능한 위치 매개변수

 

출력화면:

매개변수 갯수 :2
전체 매개변수 값 : aaa bbb
전체 매개변수 값2 : aaa bbb
매개변수1:aaa
매개변수2:bbb

 

 

조건 표현식

 조건식 작성 시, if^[^조건식^] 이렇게 space를 넣어야 하낟.

명령어 실행 후 변수에 값을 넣고 싶으면,

변수=`command`  형태로 해당 command의 결과값을 변수에 저장할 수 있다.

  ※ 주의 `(backtick 기호)를 써야한다.

 

 

if문에 사용 되는 조건식

 

[ -z ] : 문자열의 길이가 0이면 참
[ -n ] : 문자열의 길이가 0이 아니면 참


[ -eq ] : 값이 같으면 참
[ -ne ] : 값이 다르면 참
[ -gt ] :  값1 > 값2
[ -ge ] : 값1  >= 값2
[ -lt ] : 값1 < 값2
[ -le ] : 값1 <= 값2


[ -a ] : &&연산과 동일 and 연산
[ -o ] : ||연산과 동일 xor 연산


[ -d ] : 파일이 디렉토리면 참
[ -e ] : 파일이 있으면 참
[ -L ] : 파일이 심볼릭 링크면 참
[ -r ] : 파일이 읽기 가능하면 참
[ -s ] : 파일의 크기가 0 보다 크면 참
[ -w ] : 파일이 쓰기 가능하면 참
[ -x ] : 파일이 실행 가능하면 참
[ 파일1 -nt 파일2 ]  : 파일1이 파일2보다 최신파일이면 참
[ 파일1 -ot 파일2 ]  : 파일1이 파일2보다 이전파일이면 참
[ 파일1 -ef 파일2 ] : 파일1이 파일2랑 같은 파일이면 참

사용 예

비교식
[ -z ${A} ] : A 문자열의 길이가 0이면 TRUE
[ -n ${A} ] : A 문자열의 길이가 0이 아니면 TRUE
[ ${A} -eq ${B} ] : A와 B값이 같으면 TRUE
[ ${A} -ne ${B} ] : A와 B값이 다르면 TRUE
[ ${A} -gt ${B} ] : A가 B보다 크면 TRUE
[ ${A} -ge ${B} ] : A가 B보다 크거나 같으면 TRUE
[ ${A} -lt ${B} ] : A가 B보다 작으면 TRUE
[ ${A} -le ${B} ] : A가 B보다 작거나 같으면 TRUE

[ 조건식A -a 조건식B ] : 조건식 A와 B가 모두 TRUE이면 TRUE (&& 와 동일)
[ 조건식A -o 조건식B ] : 조건식 A가 TRUE거나 조건식B가 TRUE면 TRUE (|| 와 동일)

파일관련
[ -d ${A} ] : A 파일이 디렉토리면 TRUE
[ -e ${A} ] : A 파일이(노드, 디렉토리, 소켓 등등 모두) 존재하면 TRUE
[ -L ${A} ] : A 파일이 심볼릭 링크면 TRUE
[ -r ${A} ] : A 파일이 읽기 가능하면 TRUE
[ -s ${A} ] : A 파일의 크기가 0 보다 크면 TRUE
[ -w ${A} ] : A 파일이 쓰기 가능하면 TRUE
[ -x ${A} ] : A 파일이 실행 가능하면 TRUE
[ -c ${A} ] : A 파일이 Special character file 이면 TRUE
[ -f ${A} ] : A 파일이 디렉토리가 아닌 일반 regular 파일이면 TRUE
[ -S ${A} ] : A 파일이 소켓이면 TRUE
[ ${A} -nt ${B} ] : A 파일 B 파일보다 최신파일이면 참
[ ${A} -ot ${B} ]  : A 파일이 B 파일보다 이전파일이면 참
[ ${A} -ef ${B} ] : A 파일과 B 파일이 같은 파일이면 참

 

조건문

기본문법)

# 기본 예1)
if [ 조건식 ] ; then
	실행문
fi

# 기본 예2)
if [ 조건식 ] ; then
	실행문
else
	실행문
fi
    
# 기본 예3)
if [ 조건식 ] ; then
	실행문
elif [ 조건식 ] ; then
	실행문
fi
# 이중 괄호로 조건식을 묶으면 산술 연산자(>,< 등)를 사용할 수 있습니다.
if (( 조건식 )); then
    명령어
elif (( 조건식 )); then
    명령어
else
    명령어
fi
출처: https://young-cow.tistory.com/33 [어린소:티스토리]

 

활용예)

a = 1
if [ ${a} == "1" ] ; then
  echo "copy it."
else
  echo "Skip to copy it."
fi

 

 

 

예제: ` (억음 부호, backtick) 활용 (출력값을 저장하게 된다.)

#!/bin/bash

printvar=`echo "hello world"`

echo ${printvar}

출력화면:

hello world

 

 

 

예제: 작은 따음표 활용 (문자열로 취급이 된다.)

#!/bin/bash
printvar='echo "hello world"'
echo ${printvar}

출력화면:

echo "hello world"

 

반복문

예제 1: 1만번 쉘명령어 실행

#!/bin/bash

for var in {1..10000}
do
	./ssl_client2 server_addr=192.168.183.1 server_port=5060 force_version=tls12
done

 

예제 2: 10번 반복하여 echo 출력

#!/bin/bash

for var in {1..10}
do
        echo ${var};
done

 

출력화면:

 ./iterator.sh
1
2
3
4
5
6
7
8
9
10

 

 

 

반응형