Bash는 Bourne again shell의 축약어이다.
Shell은 사용자와 커널 사이의 매개체 역할을 하는 프로그램이다.
대부분의 리눅스 소프트웨어와 같이 상세한 부분 설정이 가능하다.
#!/bin/bash #반드시 이걸 적어줘야한다.
arr=("a" "b" "c" "d") #배열 선언
arr_t=(1 2 3 4 5 6 7) #배열 선언
x=4 #변수 선언시 띄어쓰기 금지
arr_t+=(8 9 10)
for i in ${arr_t[@]};
do
if [ $i = $x ] #조건문 시작,대괄호 안에 시작,끝에 반드시 띄어쓰기
then
echo "equal"
elif [ $i -lt $x ]
then
echo "$i < $x"
else
echo "$i > $x"
fi #조건문 종료시 fi 반드시 선언
done
v=("abcdefg" "hij" "klm" "nop" "qrs" "tuv") #배열선언
v[3]='x'#배열 인덱스 접근 후 값 교체
echo "${v[0]} ${v[1]} ${v[2]} ${v[3]} ${v[4]}"
for i in {1,2,3,4,5}; do echo $i; done
bahs shell의 문법은 파이썬보다는 엄격하고, C언어보다는 덜 엄격한 느낌이다.
변수선언: 변수명=5
변수선언 시 띄어쓰기를 하면 안 된다. 대문자와 소문자를 구별한다. 변수형이 따로 존재하지 않는다.
변수는 기본적으로 전부 문자열로 인식된다.
변수 호출: $변수명 or ${변수명}
변수 호출 시 $기호를 사용한다.
<배열>
배열 선언: 변수명=(1 2 3 4 5) or 변수명=("abc" "def" "hij")
배열은 () 기호로 선언하고 콤마로 원소들을 구분하지 않고 띄어쓰기로 구분한다.
배열 전체 호출 : ${배열명}
배열의 원소 호출: ${배열명[인덱스]}
배열명[@]은 배열의 원소 전체를 의미한다.
배열의 인덱스의 개수 : ${! arr[@]}
배열의 개별요소의 크기(sizeof): ${#arr[0]}
배열의 요소 추가: arr+=("abc") or arr+=(1)
추가할 요소가 한 개 일지라도 배열화 해줘야 한다.
배열의 요소 변경: arr [3] = 1
bash shell에서의 원소는 불연속적일 수 있다.
ex: (1, '',2, '',3)
<반복문>
반복문 선언: for 변수명 in ${배열명[@]}
ex) for i in ${arr[@]}
for i in (1,2,3,4,5)
bash에는 중괄호가 없기 때문에 중괄호의 역할을 해줄 단어들이 필요하다. 반복문에서는 do와 done이 해당 역할을 한다.
<조건문>
조건문은 대괄호 [ ]를 사용하고 중괄호가 없기 때문에 if로 시작해서 fi로 끝난다.
대괄호의 시작과 끝부분에 반드시 공백이 존재해야 한다.
반복문 조건문에 리눅스 명령어도 사용 가능하다.(배열대신에 디렉토리에 있는 파일명을 요소로 사용하고 싶으면 ls)
<Bash Shell로 만들어본 소수 찾기>
#!/bin/bash
read n #정수 n 입력
for((i=2; i<=$n; i++)) #2~n 까지 범위
do #반복문 시작
cnt=0 #나눴을때 0이되는 숫자의 갯수
ans="Not Prime"
for ((j=1; j<${i}; j++)); #c언어처럼 반복문 사용
do
if [ `expr $i % $j` = 0 ] #띄어쓰기 유의 expr 사용, 나눴을때 나머지가 0이면 cnt 증가
then
cnt=`expr $cnt + 1` #expr 사용
fi #조건문 종료
done #반복문 종료
if [ $cnt = 1 ] #1 ~ i-1 범위라서 1로만 나눠져야 소수라고 볼 수 있기때문에 1일때가 정답 조건
then
ans="Prime" #정답조건에 해당하면 ans변수에 prime 대입
fi #조건문 종료
echo "${i} is ${ans}" #출력
done #반복문 종료
c언어 형식처럼 반복문을 사용하는 게 변수로 범위도 설정할 수 있고 더 사용이 용이하다.
'DevOps & Cloud' 카테고리의 다른 글
서버 및 쿠버네티스 설정값 (0) | 2023.01.10 |
---|---|
2. 쿠버네티스 설치 및 설정 (0) | 2023.01.10 |
1. OpenStack Instance의 SSH 접속 (0) | 2023.01.10 |
GitLab - CI(Continuous Integration) 실습 (0) | 2023.01.03 |
GitLab - CI(Continuous Integration) (0) | 2023.01.02 |