카테고리 없음
Bash-쉘 스크립팅 기본 문법
SciomageLAB
2024. 10. 4. 12:05
반응형
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" # 위와 같음
let
은 let [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
참고문헌
- Oreily bash 책
- GNU Bash document
- 블로그
- Bash let command example
- Bash associative array
반응형