Search

μ‰˜ 슀크립트

μ‰˜ 슀크립트

λ¦¬λˆ…μŠ€ μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©λ˜λŠ” λͺ…령어듀을 순차적으둜 μ‹€ν–‰ν•˜κΈ° μœ„ν•œ 슀크립트 μ–Έμ–΄

μ‰˜(Shell) μ΄λž€?

운영체제의 컀널과 μ‚¬μš©μž κ°„μ˜ μΈν„°νŽ˜μ΄μŠ€λ‘œ λ™μž‘ν•˜λŠ” ν”„λ‘œκ·Έλž¨
μ‚¬μš©μžκ°€ λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•˜λ©΄, μ‰˜μ΄ ν•΄λ‹Ή λͺ…λ Ήμ–΄λ₯Ό ν•΄μ„ν•˜κ³  컀널에 μ „λ‹¬ν•˜μ—¬ μ‹€ν–‰ν•©λ‹ˆλ‹€. μ‰˜μ€ λͺ…λ Ήμ–΄ ν•΄μ„κΈ°μ˜ 역할을 μˆ˜ν–‰ν•˜λ©° μ‚¬μš©μžκ°€ μš΄μ˜μ²΄μ œμ™€ μƒν˜Έ μž‘μš©ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

μ‰˜ μ’…λ₯˜

β€’
Bash(Bourne Again SHell)
β€’
sh(Bourne Shell)
β€’
csh(C Shell)
β€’
ksh(Korn Shell)
β€’
zsh(Z Shell) λ“±

μ‰˜ μ£Όμš” κΈ°λŠ₯

1.
λͺ…λ Ή 해석: μ‚¬μš©μžκ°€ μž…λ ₯ν•œ λͺ…λ Ήμ–΄λ₯Ό ν•΄μ„ν•˜μ—¬ μ‹€ν–‰ κ°€λŠ₯ν•œ ν˜•νƒœλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.
2.
ν”„λ‘œκ·Έλž¨ μ‹€ν–‰: λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜κ±°λ‚˜ μ‚¬μš©μžκ°€ μž‘μ„±ν•œ 슀크립트λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.
3.
ν™˜κ²½ μ„€μ •: μ‚¬μš©μžμ˜ ν™˜κ²½ 섀정을 λ‘œλ“œν•˜κ³  κ΄€λ¦¬ν•©λ‹ˆλ‹€.
4.
λ³€μˆ˜ 및 λͺ…λ Ήμ–΄ 처리: λ³€μˆ˜μ˜ κ°’ μ„€μ •, λͺ…λ Ήμ–΄μ˜ μ‹€ν–‰ κ²°κ³Όλ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.
5.
파일 및 디렉터리 관리: 파일 및 λ””λ ‰ν„°λ¦¬μ˜ 생성, μ‚­μ œ, 이동 등을 κ΄€λ¦¬ν•©λ‹ˆλ‹€.
μ‰˜μ€ μ‚¬μš©μžμ™€ 운영체제 κ°„μ˜ 닀리 역할을 ν•˜λ©°, 터미널 λ˜λŠ” μ½˜μ†”μ„ 톡해 μ‚¬μš©μžμ™€ μƒν˜Έ μž‘μš©ν•©λ‹ˆλ‹€. μ‚¬μš©μžλŠ” μ‰˜μ„ 톡해 운영체제의 λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ‚¬μš©ν•˜κ³  λͺ…령을 내릴 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‰˜μŠ€ν¬λ¦½νŠΈ κΈ°λ³Έ 문법

1.
μ‚¬μš©ν•  μ‰˜ 지정
2.
ν‘œμ€€ 좜λ ₯
3.
λ³€μˆ˜ μ •μ˜ 및 μ‚¬μš©
4.
μ œμ–΄λ¬Έ
a.
쑰건문
b.
반볡문
5.
ν•¨μˆ˜ μ •μ˜ 및 호좜

μ‚¬μš©ν•  μ‰˜ 지정

μ‰˜ 슀크립트의 첫 쀄은 μŠ€ν¬λ¦½νŠΈκ°€ μ–΄λ–€ μ‰˜μ—μ„œ 싀행될지 μ§€μ •ν•˜λŠ” λΆ€λΆ„μž…λ‹ˆλ‹€.
주둜 Bash μ‰˜μ„ μ‚¬μš©ν•œλ‹€.
Bash (Bourne Again SHell):
#!/bin/bash
Bash
볡사
csh (C Shell):
#!/bin/sh
Bash
볡사
ksh (Korn Shell):
#!/bin/ksh
Bash
볡사
zsh (Z Shell):
#!/bin/zsh
Bash
볡사

ν‘œμ€€ 좜λ ₯

echo 좜λ ₯λ©”μ‹œμ§€
Bash
볡사
β€’
λ¬Έμžμ—΄ 좜λ ₯ (’ β€˜)
echo 'Hello, shell'
Bash
볡사
β€’
λ¬Έμžμ—΄ 좜λ ₯ (” β€œ)
echo "Hello, shell'
Bash
볡사
β€’
λ³€μˆ˜ 좜λ ₯
echo $name
Bash
볡사
β€’
λ³€μˆ˜ + λ¬Έμžμ—΄ 좜λ ₯
echo 'Hello, $name'
Bash
볡사
echo 'Hello, ${name}'
Bash
볡사

λ³€μˆ˜ μ •μ˜ 및 μ‚¬μš©

μ‰˜ μŠ€ν¬λ¦½νŠΈμ—μ„œ λ³€μˆ˜λ₯Ό μ •μ˜ν•˜κ³  μ‚¬μš©ν•˜λŠ” 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:
주의 λ³€μˆ˜ μ •μ˜ μ‹œμ—λŠ” = 기호 μ–‘μͺ½μ— 띄어쓰기λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 즉, = 기호 μ–‘μͺ½μ— 곡백이 μ—†μ–΄μ•Ό ν•©λ‹ˆλ‹€.
: name=”ALOHA”
: name = β€œALOHA”

test.sh

#!/bin/bash # λ³€μˆ˜ μ •μ˜ name="ALOHA" age=20 # λ³€μˆ˜ μ‚¬μš© echo "My name is $name, and I am $age years old."
Bash
볡사

λ³€μˆ˜ ν™•μž₯(variable expansion)

β€’
λ¬Έμžμ—΄ μ—°κ²°
β€’
λ°°μ—΄ μš”μ†Œ μ ‘κ·Ό
β€’
λͺ…λ Ήμ–΄ μ•ˆμ—μ„œ λ³€μˆ˜ μ‚¬μš©

λ¬Έμžμ—΄ μ—°κ²°

β€’
λ³€μˆ˜μ™€ λ¬Έμžμ—΄μ„ λͺ…ν™•νžˆ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ ${ } 기호λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
name="ALOHA" echo "Hello, ${name}!"
Bash
볡사
β€œHello” κ³Ό ${name}을 μ‚¬μš©ν•˜μ—¬ λ³€μˆ˜λ₯Ό λͺ…ν™•νžˆ κ΅¬λΆ„ν•˜κ³ , 좜λ ₯ κ²°κ³ΌλŠ” "Hello, ALOHA!"κ°€ λ©λ‹ˆλ‹€.

λ°°μ—΄ μš”μ†Œ μ ‘κ·Ό

fruits=("apple" "orange" "banana") index=1 echo "Selected fruit: ${fruits[${index}]}"
Bash
볡사

λͺ…λ Ήμ–΄ μ•ˆμ—μ„œ λ³€μˆ˜ μ‚¬μš©

λͺ…λ Ήμ–΄ μ•ˆμ—μ„œ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” $() 기호둜 λ¬Άμ–΄μ„œ λͺ…λ Ήμ–΄ μΉ˜ν™˜μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
PROJECT_NAME='hello-application' CURRENT_PID=$(pgrep -f "${PROJECT_NAME}.war") echo $CURRENT_PID
Bash
볡사
1.
${PROJECT_NAME}은 λ³€μˆ˜ PROJECT_NAME의 값을 μ‚¬μš©ν•©λ‹ˆλ‹€.
2.
"${PROJECT_NAME}.war"은 λ³€μˆ˜λ₯Ό ν™œμš©ν•˜μ—¬ ν™•μž₯μžκ°€ .war인 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€.
3.
pgrep -f λͺ…λ Ήμ–΄λŠ” νŒ¨ν„΄μ— μΌμΉ˜ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€μ˜ PID(ν”„λ‘œμ„ΈμŠ€ ID)λ₯Ό κ²€μƒ‰ν•©λ‹ˆλ‹€.
4.
$(...)λŠ” λͺ…λ Ήμ–΄ μΉ˜ν™˜μ„ μˆ˜ν–‰ν•˜λ©°, pgrep λͺ…λ Ήμ–΄μ˜ κ²°κ³Όλ₯Ό λ³€μˆ˜ CURRENT_PID에 ν• λ‹Ήν•©λ‹ˆλ‹€.
즉, μœ„ λͺ…λ Ήμ–΄λŠ” ${PROJECT_NAME}.war νŒ¨ν„΄μ— μΌμΉ˜ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€μ˜ PIDλ₯Ό μ°Ύμ•„μ„œ CURRENT_PID λ³€μˆ˜μ— μ €μž₯ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.

μ œμ–΄λ¬Έ

β€’
쑰건문
β€’
반볡문

쑰건문

쑰건문은 주어진 쑰건에 따라 λ‹€λ₯Έ λ™μž‘μ„ μˆ˜ν–‰ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€:
#!/bin/bash # 쑰건문 μ˜ˆμ‹œ age=18 if [ $age -ge 18 ]; then echo "You are an adult." else echo "You are a minor." fi
Bash
볡사

쑰건 처리λ₯Ό μœ„ν•œ μ—°μ‚°μž

β€’
숫자 비ꡐ μ—°μ‚°μž
β€’
λ¬Έμžμ—΄ 비ꡐ μ—°μ‚°μž
β€’
파일/디렉토리 μ—¬λΆ€ 확인 μ—°μ‚°μž

숫자 비ꡐ μ—°μ‚°μž

μ—°μ‚°μž
λŒ€μ‘ 기호
μ„€λͺ…
-eq
==
equal to (κ°™μŒ)
-ne
!=
not equal to (같지 μ•ŠμŒ)
-lt
<
less than (미만)
-le
<=
less than or equal to (μ΄ν•˜)
-gt
>
greater than (초과)
-ge
>=
greater than or equal to (이상)
#!/bin/bash # λ³€μˆ˜ μ •μ˜ a=5 b=10 # 숫자 비ꡐ if [ $a -eq $b ]; then echo "$a와 $bλŠ” κ°™μŠ΅λ‹ˆλ‹€." elif [ $a -lt $b ]; then echo "$aλŠ” $b보닀 μž‘μŠ΅λ‹ˆλ‹€." else echo "$aλŠ” $b보닀 ν½λ‹ˆλ‹€." fi
Bash
볡사

λ¬Έμžμ—΄ 비ꡐ μ—°μ‚°μž

μ—°μ‚°μž
μ„€λͺ…
==
equal to (κ°™μŒ)
!=
not equal to (같지 μ•ŠμŒ)
#!/bin/bash # λ³€μˆ˜ μ •μ˜ string1="hello" string2="world" # λ¬Έμžμ—΄ 비ꡐ if [ "$string1" == "$string2" ]; then echo "두 λ¬Έμžμ—΄μ€ κ°™μŠ΅λ‹ˆλ‹€." else echo "두 λ¬Έμžμ—΄μ€ λ‹€λ¦…λ‹ˆλ‹€." fi
Bash
볡사

파일/디렉토리 μ—¬λΆ€ 확인 μ—°μ‚°μž

μ—°μ‚°μž
μ„€λͺ…
-f
파일이 μ‘΄μž¬ν•˜λŠ”μ§€ 확인
-d
디렉토리가 μ‘΄μž¬ν•˜λŠ”μ§€ 확인
#!/bin/bash # 파일/디렉토리 μ—¬λΆ€ 확인 file_path="/path/to/somefile" directory_path="/path/to/somedir" if [ -f "$file_path" ]; then echo "파일이 μ‘΄μž¬ν•©λ‹ˆλ‹€." else echo "파일이 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€." fi if [ -d "$directory_path" ]; then echo "디렉토리가 μ‘΄μž¬ν•©λ‹ˆλ‹€." else echo "디렉토리가 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€." fi
Bash
볡사

반볡문

주어진 μ‘°κ±΄μ΄λ‚˜ νšŸμˆ˜μ— 따라 일련의 λͺ…령을 반볡 μ‹€ν–‰ν•©λ‹ˆλ‹€
β€’
for
β€’
while
β€’
until

for 반볡문

for item in 1 2 3 4 5 do echo "Item: $item" done
Bash
볡사
for i in {1..5} do echo "Iteration $i" done
Bash
볡사

while 반볡문

counter=0 while [ $counter -lt 5 ] do echo "Counter: $counter" ((counter++)) done
Bash
볡사

until 반볡문

counter=0 until [ $counter -ge 5 ] do echo "Counter: $counter" ((counter++)) done
Bash
볡사

ν•¨μˆ˜ μ •μ˜ 및 호좜

νŠΉμ • κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ”μ½”λ“œμ˜ λͺ¨μŒμ„ μ •μ˜ν•˜κ³ , ν•„μš”ν•œ μ‹€ν–‰νλ¦„μ—μ„œ ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€.
#!/bin/bash # ν•¨μˆ˜ μ •μ˜ ν•¨μˆ˜λͺ…() { echo "Hello, $1!" echo "Hello, $2!" } # ν•¨μˆ˜ 호좜 ν•¨μˆ˜λͺ… "인자1" "인자2"
Bash
볡사
#!/bin/bash # ν•¨μˆ˜ μ •μ˜ greet() { echo "Hello, $1!" } # ν•¨μˆ˜ 호좜 greet "ALOHA"
Bash
볡사

μ‰˜ μ‹€ν–‰ν•˜κΈ°

sh test.sh
Bash
볡사

bash μ‰˜ μ‹€ν–‰ν•˜κΈ°

bash test.sh
Bash
볡사