Bash-쉘 스크립팅 기본 문법

Table of Content

Shebang

#! interpreter [optional-arg]

env를 활용해서 다른 시스템에도 적용 가능하게 하기

env 명령어를 환경변수를 출력하거나 지정후 command를 실행할 수 있는 명령어이다.

Usage: env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]
Set each NAME to VALUE in the environment and run COMMAND.

아래와 같이 env 명령어로 bash를 실행시키도록 하면 사용자별로 다를 수 있는 /usr/bin/<interpreter> 명령어보다 env에 지정된 $PATH에 나와있는 명령어를 실행시키도록 하여 python처럼 venv가 있을 수 있는 스크립트도 잘 동작할 수 있도록 할 수 있다.

#!/usr/bin/env bash

변수 할당과 출력

변수 할당

var_a="hi"
var_number=0
let var_b=100+200 
# 또는
let "var_b = 100 + 200" # 위와 같음  

letlet [expression 1] [expression 2] … [expression 3] arithmetic expression string을 받아서 처리할 수 있는 명령어로 변수 할당뿐만 아니라 let "var1 = 5"; echo $var1 과 같이 활용도 가능하다.

*삭제는 unset <variable-name> 을 통해 삭제하면 된다.

읽기 전용 변수 만들기

readlonly 커맨드를 이용하면 bash에 읽기 전용 변수를 등록할 수 있다.

readonly var_a
readonly var_a="BlahBlah"

# declare을 이용하기
declare -r var_a

배열 선언과 인덱싱, 전체 출력

@ 로 인덱싱하면 전체 출력이 가능하다.

array=(111 "foo" 222 "bar" 333 "foobar")
echo ${array[0]}
echo ${array[@]}

# 또는 declare로 선언하기
declare -a array

키-밸류 페어 만들기

declare: declare [-aAfFgilnrtux] [-p] [name[=value] ...]
    Set variable values and attributes.
# 페어 만들기
declare -A 변수 변수[key]=value
# Ex1
declare -A dict 
dict[key1]=value1 
dict[key2]=value2 
echo ${dict[@]}

# Ex2
declare -A dict=([key1]=value1 [key2]=value2 [key3]=value3)

출력하기

!를 붙이면 키값을 출력할 수 있다.

# 키 출력
for key in "${!dict[@]}"; do echo $key; done

# 값 출력
for value in "${dict[@]}"; do echo $value; done

데이터 추가 /삭제

# 추가
dict+=([key4]=value4)
# 삭제
unset dict[key1]

조건문

#!/bin/bash 
data=10
if [ $data -eq 10 ] # 또는 ((data == 10))
then 
    echo "hello world!" 
fi

루프

number=0 
while [ $number -le 2 ] # 또는 while ((number < 10))
do 
    echo "Number: ${number}" 
    ((number++)) 
done
numbers=(0 1 2 3 4 5 6 7 8 9 )
for number in numbers
# 또는
# for number in 0 1 2 3 4 5 6 7 8 9 
# for number in {1..10)
# range를 지정하여 start, end, step으로 접근
# for number in {1..10..1} 
# for ((number=0; number < 10; number++))
do
  echo $number
done

until문은 while과 비슷하지만 조건값이 참이 되면 break되는 점이 다르다.

#!/bin/bash
number=0
until [ $number -gt 10 ]
do
  echo $number

  ((number++))
done

break와 continue

#!/bin/bash
number=0
while ((number < 100))
do
    ((number++))
    if ((number % 2 == 0))
    then
        continue
    elif ((number == 21))
    then
        break
    else
        echo $number
    fi
done

참고문헌

Related Posts

답글 남기기

이메일 주소는 공개되지 않습니다.