bash 공부

25624 단어 shellshell

참고한 블로그 : https://engineer-mole.tistory.com/200

기초

# 코멘트이다.
# 코멘트 처리된 구문은 실행되지 않는다.

#! /bin/sh : 처음 스크립트 작성할 때 시작 부분

ehco로 출력, read로 입력할 수 있다.
read NAME - 입력을 대기한다. 대기하고 있는 경우, 스크립트는 실행되지 않는다.

echo "Hello, $NAME"

Bash에서는 -e 플래그로 특수 텍스트를 이스케이프할 수 있다.

echo "Hello\n$NAME!" # 개행된다.

변수의 이름으로써 영문자, 숫자 그리고 언더바가 사용된다.
변수에 값을 전달할 때는 = 의 앞, 뒤에 공백 없이 작성한다. 문자열인 경우 ""로 감싼다.

var="변수1"
VaR_2="변수2"

변수에 엑세스할 때 변수명의 앞에 $를 넣는다. 혹은 $넣고 변수를 {}로 감싼다.
하나의 변수에 한 개의 값만 보존된다.

echo "Var_2=$VaR_2"

변수의 값이 덮어 쓰기되는 것을 방지하기 위해서는 readonly를 사용한다.
변수를 unset으로 삭제할 수 있다. 그러나 readonly 변수를 삭제하는 것은 불가능하다.

readonly var
var="readonly var를 바꿔보자" # readonly 변수 바꾸려고 한다고 실행 에러 발생

특별한 변수

쉘 스크립트에서는 아래와 같은 특별한 변수가 있다.

변수실행 결과
$0스크립트 명
$1 ~ $9인수, 첫 번째의 인수는 $1, 2번 째의 인수는 $2로 엑세스한다.
$#스크립트에 전달된 인수의 수
$*모든 인수를 모아서 하나로 처리
$@모든 인수를 각각 처리
$?직전에 실행한 커맨드의 종료 값(0은 성공, 1은 실패)
$$이 쉘 스크립트의 프로세스 ID
$!마지막으로 실행한 백그라운드 프로세스 ID

특수문자는 문자열로 사용할 때는 앞에 \를 쓴다.

#!/bin/sh

echo "\$0(스크립트 명): $0"
echo "\$1(1번째 인수): $1"
echo "\$2(2번째 인수): $2"
echo "\$#(인수의 수): $#"
echo "\"\$*\": \"$*\""
echo "\"\$@\": \"$@\""
VAR="exit값은0이 될 것이다."
echo $?

실행 결과

$ ./test.sh first second 3rd $0(스크립트 명): test.sh
$1(1번째 인수): first
$2(2번째 인수): second
$3(3번째 인수): 3rd
$#(인수의 수): 3
"$*": "first second third"
"$@": "first second third"
0

변수 값의 치환

명령어실행 결과
${var}변수 값을 바꿔 넣는다.
${var:-word}변수가 아직 세팅되지 않거나 공백 문자열의 경우 word를 반환한다. var에는 저장되지 않는다.(default 값)
${var:=word}변수가 아직 세팅되지 않거나 공백 문자열의 경우 word를 반환한다. var에 저장된다.(default 값을 저장함)
${var:?word}변수가 아직 세팅되지 않거나 공백 문자열의 경우 치환에 실패하고, 스탠다드 에러에 에러가 표시된다.
${var:+word}변수가 세팅되지 않은 경우 word가 반환된다. var에는 저장되지 않는다.

test.sh

echo "1 - ${test:-TestWord1}"
echo "2 - test = ${test}"
echo "3 - ${test:=TestWord3}"
echo "4 - test = ${test}"
unset test
echo "5 - ${test:+TestWord5}"
echo "6 - test = ${test}"
test="new Value"
echo "7 - ${var:+TestWord7}"
echo "8 - test = ${test}"
echo "9 - ${test:?ErrorMessage}"
echo "10 - test = ${test}"

실행결과

1 - TestWord1
2 - test = 
3 - TestWord3
4 - test = TestWord3
5 - 
6 - test = 
7 - TestWord7
8 - test = new Value
9 - new Value
10 - test = new Value

배열

#!/bin/bash

# bash shell로 배열을 작성하는 방법

ARRAY=(item1 item2 item3 item4)
ARRAY[0]="ITEM1"
ARRAY[2]="ITEM3"

echo "ARRAY[0]: ${ARRAY[0]}"
echo "ARRAY[1]: ${ARRAY[1]}"

# 모든 아이템에 엑세스하기

echo "ARRAY[*]: ${ARRAY[*]}"
echo "ARRAY[@]: ${ARRAY[@]}"

실행 결과

ARRAY[0]: ITEM1
ARRAY[1]: item2
ARRAY[*]: ITEM1 item2 ITEM3 item4
ARRAY[@]: ITEM1 item2 ITEM3 item4

오퍼레이터

  • 연산자
연산자의미
+덧셈echo expr 10 + 20 => 30
-뺄셈echo expr 20 - 10 => 10
*제곱echo expr 11 \* 11 => 121
/나눗셈echo expr 10 / 2 => 5
%나머지echo expr 10 % 4 => 2
=자정a=$b b의 값은 a에 저장된다
==동일[ 'a==a' == '
!=다름[ 'a!=a' != '
  • 비교
비교의미
-eq동일[ "a"eq"a" -eq "
-ne다음[ "a"ne"a" -ne "
-gt보다 큼[ "a"gt"a" -gt "
-lt보다 작음[ "a"lt"a" -lt "
-ge보다 크거나 같거나[ "a"ge"a" -ge "
-le보다 작거나 같거나[ "a"le"a" -le "
!(이)가 아니다[ ! "a"gt"a" -gt "
-oor[ "a"gt"a" -gt "
-aand[ "a"gt90a"a" -gt 90 -a "
-z문자열이 비었는가[ -z "$a" ]$a에 어떤 것도 지정되지 않은 경우 TRUE가 반환된다
-n문자열이 비었는가[ -n "$a" ] $a에 어떠한 것이 지정되어 있다면 TRUE가 반환된다

if문

  • if의 기본 작성법은 if [조건] then 커맨드 fi 이다
  • 조건과 일치하는 경우 then 뒤의 커맨드가 실행된다
  • 조건과 다른 경우 차례로 elif [조건]에 적힌 내용을 확인한다
  • 일치하는 조건이 없는 경우 else 다음의 커맨드가 실행된 후 종료된다
    else가 존재하지 않는 경우, 그대로 종료된다
#!/bin/bash

if [ "$1" -gt "$2" ] 
then
    echo "1번째 인수가 2번째 인수보다 크다"
elif [ "$1" -eq "$2" ] 
then
    echo "1번째 인수와 2번째 인수가 동일하다"
else
    echo "1번째 인수가 2번째 인수보다 작다"
fi

실행 결과

./test.sh 2 7 
1번째 인수가 2번째 인수보다 작다

./test.sh 10 5 
1번째 인수가 2번째 인수보다 크다

./test.sh 9 9 
1번째 인수와 2번째 인수가 동일하다

좋은 웹페이지 즐겨찾기