Bash 스크립트에서 변수 만들기
다른 언어와 유사하게 변수를 만들 수 있다.
변수명=값 #변수선언
$변수명 #사용
Bash에서 $
기호를 사용해야만 변수가 변수인 것을 알고 참조할 수 있다.
first = 'cynthia'
last = 'liu'
echo "Hi there " first last
$없이 변수명을 사용하면 그냥 문자열로 인식함
Hi there first last
보통 다른 프로그래밍 언어를 사용할 때 변수 할당 시, 띄어쓰기를 한다고해서 에러가 발생하거나 하지 않는다.
그러나 Bash에서는 에러가 발생하기 때문에 주의해야한다.
var1='hihi'
var2 = 'hihi'
line 2: var2: command not found
작은따옴표, 큰따옴표, 백틱
'텍스트'
를 사용하면 안에 내용이 모두 문자열로 해석된다.
"텍스트"
를 사용하면 안에$
표시나`
표시를 이해한다.
`텍스트`
를 사용하면 백틱 기호 사이 모든 것을 새 셸로 보내고 결과를 다시 변수로 가져온다.
예제
now_var='NOW'
now_var_singlequote='$now_var'
echo $now_var_singlequote
$now_var
작은따옴표를 사용하면 $기호 인식이 안된다.
now_var_doublequote="$now_var"
echo $now_var_doublequote
NOW
큰따옴표를 사용해야 변수를 참조할 수 있다.
rightnow_doublequote="The date is `date`."
echo $rightnow_doublequote
The date is 2021년 9월 30일 목요일 09시 19분 09초 KST.
이번에는 date라는 현재 시각을 알려주는 셸 명령을 백틱을 사용하여 bash script에서 활용해보는 예제다.
큰따옴표로 묶은 텍스트 안에 백틱을 사용하여 셸 안에 셸을 실행할 수 있다.
백틱과 똑같은 동작을 하는 방법이 parentheses
이다.
$(명령)
으로 사용하며 이 방법이 더 현대적이다.
숫자 변수 사용하기
Bash에서는 다른 언어에서 가능한 산술 연산이 기본적으로 지원되지 않는다.
그래서 명령어를 사용해서 산술연산을 수행해야한다.
대표적으로 expr
이 있는데, 이 명령에는 큰 한계가 있다.
expr 1 + 2 # 3
expr 1 = 2.5 # error 발생
소수 연산이 안되는 문제가 있기 때문에 기본 계산기를 나타내는 bc
명령어를 사용한다.
~ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1 + 2.5
3.5
1 + 2
3
1+3
4
quit
bc 명령으로 기본 계산기 프로그램을 수행시킬 수 있고, 프로그램을 열지 않고 사용하려면 파이핑을 하면 된다.
echo "1 + 2.75" | bc # 3.75
bc의 반환값에 대해 소수 자릿수를 지정하고 싶다면 scale
을 사용한다.
~ echo "10/3" | bc
3
~ echo "scale=3; 10/3" | bc
3.333
Bash script에서 숫자 변수 정의하기
dog_age=6
따옴표로 값을 묶어서 나타낼 수 있지만, 문자열로 취급하기 때문에 나중에 할 수 있는 작업을 제한할 수 있다.
dog_name='Roger'
dog_age=6
echo "My dog's name is $dog_name and he is $dog_age years old"
My dog's name is Roger and he is 6 years old
그리고 괄호 안에서 숫자 연산도 가능하다.
expr 5 + 7
echo $((5 + 7)) # bc가 아닌 expr 기반이다. 그런데, 소수점 계산 됨!
shell 안에 shell 다시 해보기
model1=87.65
model2=89.20
echo "The total score is $(echo "$model1 + $model2" | bc)"
echo "The average score is $(echo "($model1 + $model2) / 2" | bc)"
The total score is 176.85
The average score is 88
배열 사용하기
Bash에서는 2가지 방법으로 배열을 만들 수 있다.
- 데이터 요소 없이 만들기
decalre -a my_first_array
- 요소 추가해서 만들기
my_first_array=(1 2 3) #my_first_array=(1,2,3) 아님!!!!
my_array=(1 3 5 2)
echo ${my_array[@]} # 1 3 5 2
@
을 사용해 배열의 모든 요소를 인덱싱 할 수 있다.
길이는 #
를 사용한다.
echo ${#my_array[@]} # 4
Bash도 인덱싱은 파이썬처럼 제로 인덱싱을 사용한다.(0부터 시작)
요소값을 수정할 때는 $
표시를 하지 않고 변수에 바로 값을 넣어준다.
my_first_array=(15 20 300 42 23 2 4 33 54 67 66)
my_first_array[0]=999
echo ${my_first_array[0]} # 999
일부 인덱싱
echo ${my_first_array[@]:3:2} # 인덱스 3에서부터 2개, 42 23
요소 추가하기
my_array=(300 42 23 2 4 33 54 67 66)
my_array+=(10)
echo ${my_array[@]} # 300 42 23 2 4 33 54 67 66 10
요소 값을 괄호로 묶지않으면 그냥 문자열 10이 첫번째 요소에 이어붙여져 30010
이 된다.
연관 배열(Associative array)
연관 배열은 파이썬의 dictionary와 유사하다.
연관 배열을 사용하려면 bash 버전이 반드시 4이상이어야 한다.
declare -A city_details
city_details=([city_name]="New York" [population]=14000000)
echo ${city_details[city_name]} #New York 출력
-A
옵션을 사용하여 연관 배열을 가질 변수를 할당한다.
연관배열은 ([key1]=값1 [key2]=값2)
형태로 정의할 수 있다.
인덱싱은 key로 한다.
만약 모든 key를 확인하고 싶으면 !
를 사용한다.
echo ${!city_details[@]} #city_name population
Uploaded by Notion2Tistory v1.1.0