티스토리 뷰

Linux

[linux] Bash shell script 작성( 기본 )

구티맨 2020. 3. 23. 19:44
#!/usr/bin/env bash

스크립트 파일이 bash shell script 인지 알려주기 위해 선언하는 부분이다.

변수, 출력, 주석

#!/usr/bin/env bash

echo "hello"

# this is comment

str="hello"
echo ${str}

echo 로 문자열 출력을 할 수 있다.
주석은 # 을 선언하면 주석이 된다.
변수는 공백 없이 = 연산자를 사용하면 된다. 기본적으로 전역 변수가 되나, 현재 실행된 스크립트에서만 유효하다.( 자식 스크립트에서는 사용 불가 )
변수 앞에 export 를 선언하면, 환경 변수로 등록이 되어 자식 스크립트에서도 사용 가능하다.
local 을 선언하면, 함수 안에서 지역 변수로 사용 가능하다.

위치 매개 변수( Positional Parameters )

$0

쉘 스크립트 실행 명령어

$1

첫 번째 인자( argument ). $1 $2 $3 ... ${10} 순으로 인자 값을 가져 올 수 있다.( 10 부터는 {} 을 사용 )

$*

전체 인자 값

$@
$#

인자의 총 개수

Parameterr Expansion

str="Hello"

echo "Hello World!"
echo $str world
echo "$str world"
echo "${str} world"
echo "${str:2}"          # llo  :위치
echo "${str:2:1}"        # l    :위치:길이
echo "${string=None}"    # None 변수 미선언시, 기본값 지정
echo "${string:=Noneee}" # Noneee 변수 미선언 혹은 NULL 일 때 기본값 지정

${:} 같은 expansion 은 문자열 뿐만 아니라 다른 변수들에도 동일하게 사용할 수 있는 것이니 참조하자.

이 외에도 다양한 문법이 존재 한다. 필요시 더 찾아보기로 하자.

$(), ${}

$(command)

command substitution 이라고 한다. 명령어 바꿔치기 정도로 해석이 될 것 같다.
이는 명령어를 수행하고, output을 $() 안에 넣어준다.

echo $(seq 1 10) # 1 2 3 4 5 6 7 8 9 10 출력

seq 라는 리눅스 명령어를 실행하고 결과를 $() 에 넣어주어, echo로 출력되는 것이다.

${parameter}

parameter substitution 이라고 한다. 변수를 참조해서, 결과를 ${}에 넣어준다.

$ animal=cat
$ echo $animals
                                # No such variable as “animals”.
$ echo ${animal}s
cats
$ echo $animal_food
                                # No such variable as “animal_food”.
$ echo ${animal}_food
cat_food

$ echo "$animal"s
cats

$ plural=s
$ echo $animal$plural
cats

{}가 있으나 없으나 $만으로 변수의 값을 넣어줄 수 있으나 다른 값을 붙여서 쓸려면 ${} 를 사용해야 한다.
그렇지 않으면 $부터 공백이나 $ 나올 때 까지 변수 이름으로 판단을 할 것이기 때문이다.

참조

https://superuser.com/questions/935374/difference-between-and-in-shell-script/935427#935427?newreg=6138221f73ab4573b7420bf3a7ef4415

array

배열 변수 사용은 반드시 괄호를 사용해야 한다.

# 배열 선언
declare -a array

# 배열에 값 저장
array=("1" "2" "3" "4")
echo ${array}            # 1 출력
echo ${array[@]}        # 1 2 3 4 출력
echo ${array[*]}        # 1 2 3 4 출력

# 배열에 값 추가 및 전체 배열 출력
array[4]="test"
echo ${array[@]}        # 1 2 3 4 test 출력

# 배열에 값 추가
array=(${array[@]} "add")
echo ${array[@]}        # 1 2 3 4 test add 출력

if와 정수, 문자열 비교

num=3
if [ $num -eq 3 ]; then
    echo "num is 3"
elif [ $num -ne 3 ]; then
    echo "num is not 3"
else
    echo "else statement"
fi

str="Hello"
if [ $str = "Hello" ]; then
    echo "str is Hello"        # str is Hello
fi
if [ $str == "Hello" ]; then
    echo "str is Hello"        # str is Hello
fi
if [ $str != "Hel" ]; then
    echo "str is not Hel"    # str is not Hel
fi

for

참조

https://blog.gaerae.com/2015/01/bash-hello-world.html

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함