[Linux] Shell Script ๊ธฐ์ดˆ ๋ฌธ๋ฒ• - ์—ฐ์‚ฐ์ž

2025. 5. 31. 21:04ยทLinux
๋”๋ณด๊ธฐ
๋”๋ณด๊ธฐ

์ฒ˜์Œ ๋ฐฐ์šฐ๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ ์ฑ… ์ฐธ๊ณ 

์—ฐ์‚ฐ์ž

ํฌ๊ฒŒ ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ž, ๋น„๊ต ๋ฐ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž, ๋””๋ ‰ํ„ฐ๋ฆฌ ์—ฐ์‚ฐ์ž, ํŒŒ์ผ ์—ฐ์‚ฐ์ž ๋ฐ ํŒŒ์ผ ๋น„๊ต ์—ฐ์‚ฐ์ž๋กœ ๊ตฌ๋ถ„ ๊ฐ€๋Šฅ.

๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ž

๋ณ€์ˆ˜์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋ฌธ์ž์—ด์ธ ๊ฒฝ์šฐ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์—ฐ์‚ฐ์ž.
ํ•ด๋‹น ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€์ˆ˜์— ์ˆซ์ž ๋˜๋“ , ํŒŒ์ผ๋ช…์ด๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ ๊ฐ™์€ ๊ฐ์ฒดํ˜•์˜ ๊ฐ’์ด ์ €์žฅ๋˜๋“  ์ƒ๊ด€์—†์ด ๋ชจ๋‘ ๋ฌธ์ž์—ด๋กœ ์ทจ๊ธ‰.

์—ฐ์‚ฐ์ž ์‚ฌ์šฉ๋ฒ• ์„ค๋ช…
-z if [-z $๋ณ€์ˆ˜] ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ 0์ด๋ฉด ์ฐธ
-n if [-n $๋ณ€์ˆ˜] ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด ์ฐธ

๋ฌธ์ž์—ด ๋ณ€์ˆ˜๊ฐ€ NULL ๊ฐ’์ธ์ง€ ์ฒดํฌํ•  ๊ฒฝ์šฐ

~$ cat if_example1.sh
#!/bin/bash

if [ -z $1 ]
then
        echo True
else
        echo False
fi
~$ sh if_example1.sh
True
~$ sh if_example1.sh test
False

์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ ์ธ์ž๊ฐ€ ์ž…๋ ฅ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€ ์ฒดํฌ.
-z ์—ฐ์‚ฐ์ž๋Š” ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ 0์ผ ๋•Œ True๋ฅผ ๋ฆฌํ„ด.

๋ฌธ์ž์—ด ๋ณ€์ˆ˜์— ๋ฌธ์ž์—ด์ด ์ €์žฅ๋˜์—ˆ๋Š”์ง€ ์ฒดํฌํ•  ๊ฒฝ์šฐ

~$ cat if_example2.sh
#!/bin/bash

if [ -n $1 ]
then
        echo True
else
        echo False
fi
~$ sh if_example2.sh
False
~$ sh if_example2.sh test
True

-n์—ฐ์‚ฐ์ž๋Š” ๋ฌธ์ž์—ด์ด 0๋ณด๋‹ค ํฌ๋ฉด True๋ฅผ ๋ฆฌํ„ดํ•˜๊ณ , ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ 0์ด๋ฉด Flase๋ฅผ ๋ฆฌํ„ด.

๋น„๊ต ์—ฐ์‚ฐ์ž

๋‘ ๊ฐœ์˜ ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’์˜ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•  ๋•Œ ์‚ฌ์šฉ.
๋ณ€์ˆ˜์˜ ์œ ํ˜•์€ ์ˆซ์žํ˜•๊ณผ ์„ธ๋ฏธ์ฝœ๋ก ์ด๋‚˜ ์ฝœ๋ก ์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋ฌธ์žํ˜•์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Œ.

์ •์ˆ˜ ๋น„๊ต ์—ฐ์‚ฐ์ž

์—ฐ์‚ฐ์ž ์‚ฌ์šฉ๋ฒ• ์„ค๋ช…
-eq if [ $๋ณ€์ˆ˜1 -eq $๋ณ€์ˆ˜2 ] ๋ณ€์ˆ˜1๊ณผ ๋ณ€์ˆ˜2์˜ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด ์ฐธ, =๊ณผ ๋™์ผ
-ne if [ $๋ณ€์ˆ˜1 -ne $๋ณ€์ˆ˜2 ] ๋ณ€์ˆ˜1๊ณผ ๋ณ€์ˆ˜2์˜ ๊ฐ’์ด ๋‹ค๋ฅด๋ฉด ์ฐธ, != ๊ณผ ๋™์ผ
-gt if [ $๋ณ€์ˆ˜1 -gt $๋ณ€์ˆ˜2 ] ๋ณ€์ˆ˜1์˜ ๊ฐ’์ด ๋ณ€์ˆ˜2์˜ ๊ฐ’๋ณด๋‹ค ํฌ๋ฉด ์ฐธ
-ge if [ $๋ณ€์ˆ˜1 -ge $๋ณ€์ˆ˜2 ] ๋ณ€์ˆ˜1์˜ ๊ฐ’์ด ๋ณ€์ˆ˜2์˜ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ์ฐธ
-lt if [ $๋ณ€์ˆ˜1 -lt $๋ณ€์ˆ˜2 ] ๋ณ€์ˆ˜1์˜ ๊ฐ’์ด ๋ณ€์ˆ˜2์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด ์ฐธ
-le if [ $๋ณ€์ˆ˜1 -le $๋ณ€์ˆ˜2 ] ๋ณ€์ˆ˜1์˜ ๊ฐ’์ด ๋ณ€์ˆ˜2์˜ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ์ฐธ
> if (( $๋ณ€์ˆ˜1 > $๋ณ€์ˆ˜2 )) ๋ณ€์ˆ˜1์˜ ๊ฐ’์ด ๋ณ€์ˆ˜2์˜ ๊ฐ’๋ณด๋‹ค ํฌ๋ฉด ์ฐธ
>= if (( $๋ณ€์ˆ˜1 >= $๋ณ€์ˆ˜2 )) ๋ณ€์ˆ˜1์˜ ๊ฐ’์ด ๋ณ€์ˆ˜2์˜ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ์ฐธ
< if (( $๋ณ€์ˆ˜1 < $๋ณ€์ˆ˜2 )) ๋ณ€์ˆ˜1์˜ ๊ฐ’์ด ๋ณ€์ˆ˜2์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด ์ฐธ
<= if (( $๋ณ€์ˆ˜1 <= $๋ณ€์ˆ˜2 )) ๋ณ€์ˆ˜1์˜ ๊ฐ’์ด ๋ณ€์ˆ˜2์˜ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ์ฐธ

๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์—๋Š” (()) ์ค‘์ฒฉ์†Œ๊ด„ํ˜ธ๋ฅผ  ์‚ฌ์šฉํ•ด์•ผ ํ•จ.

๋ณ€์ˆ˜๊ฐ’์ด ์„œ๋กœ ๊ฐ™์€์ง€ ์ฒดํฌํ•  ๋•Œ

~$ VAR1=10; VAR2=10
~$ if [ $VAR1 -eq $VAR2 ]; then echo True; else echo False; fi
True
~$ if [ $VAR1 = $VAR2 ]; then echo True; else echo False; fi
True

๋ณ€์ˆ˜๊ฐ’์ด ์„œ๋กœ ๋‹ค๋ฅธ์ง€ ์ฒดํฌํ•  ๋•Œ

~$ VAR1=10; VAR2=20
~$ if [ $VAR1 -ne $VAR2 ]; then echo True; else echo False; fi
True
~$ if [ $VAR1 != $VAR2 ]; then echo True; else echo False; fi
True

๋ณ€์ˆ˜๊ฐ’์˜ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•  ๋•Œ - ๋ฌธ์žํ˜• ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ

~$ VAR1=10; VAR2=20
~$ if [ $VAR1 -gt $VAR2 ]; then echo True; else echo False; fi
False
~$ if [ $VAR1 -ge $VAR2 ]; then echo True; else echo False; fi
False
~$ if [ $VAR1 -lt $VAR2 ]; then echo True; else echo False; fi
True
~$ if [ $VAR1 -le $VAR2 ]; then echo True; else echo False; fi
True

๋ณ€์ˆ˜๊ฐ’์˜ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•  ๋•Œ - ๊ธฐํ˜ธ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ

~$ VAR1=10; VAR2=20
~$ if (( $VAR1 > $VAR2 )); then echo True; else echo False; fi
False
~$ if (( $VAR1 >= $VAR2 )); then echo True; else echo False; fi
False
~$ if (( $VAR1 < $VAR2 )); then echo True; else echo False; fi
True
~$ if (( $VAR1 <= $VAR2 )); then echo True; else echo False; fi
True

๋ฌธ์ž์—ด ๋น„๊ต ์—ฐ์‚ฐ์ž

๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ์—๋Š” ์ •์ˆ˜๋ฅผ ๋น„๊ตํ•  ๋•Œ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๋ฌธ์žํ˜• ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ธฐํ˜ธ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉ. โžก๏ธ ๋ฌธ์ž์—ด ๋น„๊ต ์‹œ ๋น„๊ต ์—ฐ์‚ฐ์ž๋„ ๋ฌธ์ž๋กœ ๋˜์–ด ์žˆ์œผ๋ฉด, ํœด๋จผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ํ™•๋ฅ ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ.
๋ฌธ์ž์—ด ๋น„๊ต์—์„œ๋Š” ๊ธฐํ˜ธ ์—ฐ์‚ฐ์ž๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ. ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ๊ธฐํ˜ธ์™€ ๋™์ผํ•œ <> ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์—๋Š” ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์ค‘์ฒฉ๋Œ€๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉ.

์—ฐ์‚ฐ์ž ์‚ฌ์šฉ๋ฒ• ์„ค๋ช…
= if [ $๋ณ€์ˆ˜1 = $๋ณ€์ˆ˜2 ] ๊ฐ ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด ์ฐธ, ๋™์ผํ•œ ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ ์ฐธ
== if [ $๋ณ€์ˆ˜1 == $๋ณ€์ˆ˜2 ] ๊ฐ ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด ์ฐธ, ๋™์ผํ•œ ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ ์ฐธ
!= if [ $๋ณ€์ˆ˜1 != $๋ณ€์ˆ˜2 ] ๊ฐ ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋‹ค๋ฅด๋ฉด ์ฐธ, ์„œ๋กœ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ ์ฐธ
> if [[ $๋ณ€์ˆ˜1 > $๋ณ€์ˆ˜2 ]] ๋ณ€์ˆ˜1์˜ ASCII ์ฝ”๋“œ๊ฐ’์ด ๋ณ€์ˆ˜2๋ณด๋‹ค ํฌ๋ฉด ์ฐธ
< if [[ $๋ณ€์ˆ˜1 < $๋ณ€์ˆ˜2 ]] ๋ณ€์ˆ˜1์˜ ASCII ์ฝ”๋“œ๊ฐ’์ด ๋ณ€์ˆ˜2๋ณด๋‹ค ์ž‘์œผ๋ฉด ์ฐธ

๋ฌธ์ž์—ด์„ ๋น„๊ตํ•  ๋•Œ

~$ VAR1="abc"; VAR2="def"
# VAR1๊ณผ VAR2๊ฐ€ ๊ฐ™์œผ๋ฉด True, ๋‹ค๋ฅด๋ฉด False, ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— False ์ถœ๋ ฅ
lucy@DESKTOP-J983OIC:~$ if [ $VAR1 = $VAR2 ]; then echo True; else echo False; fi
False
# VAR1๊ณผ VAR2๊ฐ€ ๊ฐ™์œผ๋ฉด True, ๋‹ค๋ฅด๋ฉด False, ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— False ์ถœ๋ ฅ
lucy@DESKTOP-J983OIC:~$ if [ $VAR1 == $VAR2 ]; then echo True; else echo False; fi
False
# VAR1๊ณผ VAR2๊ฐ€ ๋‹ค๋ฅด๋ฉด True, ๊ฐ™์œผ๋ฉด False, ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— True ์ถœ๋ ฅ
lucy@DESKTOP-J983OIC:~$ if [ $VAR1 != $VAR2 ]; then echo True; else echo False; fi
True
# VAR1์ด VAR2๋ณด๋‹ค ASCII ์ฝ”๋“œ๊ฐ’์ด ํฌ๋ฉด True, ์ž‘์œผ๋ฉด False, ์ž‘๊ธฐ ๋•Œ๋ฌธ์— True ์ถœ๋ ฅ
lucy@DESKTOP-J983OIC:~$ if [[ $VAR1 > $VAR2 ]]; then echo True; else echo False; fi
False
# VAR1์ด VAR2๋ณด๋‹ค ASCII ์ฝ”๋“œ๊ฐ’์ด ์ž‘์œผ๋ฉด True, ํฌ๋ฉด False, ์ž‘๊ธฐ ๋•Œ๋ฌธ์— True ์ถœ๋ ฅ
lucy@DESKTOP-J983OIC:~$ if [[ $VAR1 < $VAR2 ]]; then echo True; else echo False; fi
True

๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž

AND ์—ฐ์‚ฐ์ž์™€ OR ์—ฐ์‚ฐ์ž๊ฐ€ ์žˆ์œผ๋ฉฐ, and์˜ ์•ฝ์ž์ธ -a์™€ or์˜ ์•ฝ์ž์ธ -o๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
AND์™€ OR์˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„ &&์™€ ||๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

์—ฐ์‚ฐ์ž ์‚ฌ์šฉ๋ฒ• ์„ค๋ช…
-a if [ ์กฐ๊ฑด์‹1 -a ์กฐ๊ฑด์‹2 ] AND ์—ฐ์‚ฐ์œผ๋กœ ์กฐ๊ฑด์‹1๋„ ์ฐธ์ด๊ณ , ์กฐ๊ฑด์‹2๋„ ์ฐธ์ด๋ฉด ์ฐธ, ์กฐ๊ฑด์‹์€ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋ฅผ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ๋ฅผ ๋งํ•จ
-o if [ ์กฐ๊ฑด์‹1 -o ์กฐ๊ฑด์‹2 ] OR ์—ฐ์‚ฐ์œผ๋กœ ์กฐ๊ฑด์‹1์ด ์ฐธ์ด๊ฑฐ๋‚˜ ์กฐ๊ฑด์‹2๊ฐ€ ์ฐธ์ด๋ฉด ์ฐธ
&& if [ ์กฐ๊ฑด์‹1 ] && [ ์กฐ๊ฑด์‹2 ]
if [[ ์กฐ๊ฑด์‹1 && ์กฐ๊ฑด์‹2  ]]
AND ์—ฐ์‚ฐ์œผ๋กœ && ๊ธฐํ˜ธ๋ฅผ ์“ธ ๊ฒฝ์šฐ ์กฐ๊ฑด์‹ ๋ณ„๋กœ ๋Œ€๊ด„ํ˜ธ []๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ค‘์ฒฉ ๋Œ€๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ
|| if [ ์กฐ๊ฑด์‹1 ] || [ ์กฐ๊ฑด์‹2 ]
if [[ ์กฐ๊ฑด์‹ || ์กฐ๊ฑด์‹2 ]]
OR ์—ฐ์‚ฐ์œผ๋กœ || ๊ธฐํ˜ธ๋ฅผ ์“ธ ๊ฒฝ์šฐ ์กฐ๊ฑด์‹ ๋ณ„๋กœ ๋Œ€๊ด„ํ˜ธ []๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ค‘์ฒฉ ๋Œ€๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

AND, OR ์—ฐ์‚ฐ - ๋ฌธ์žํ˜• ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ

~$ VAR1=10; VAR2=20; VAR3=30
~$ if [ $VAR1 -lt $VAR2 -a $VAR2 -gt $VAR3 ]
> then
> echo True
> else
> echo False
> fi
False
~$ if [ $VAR1 -lt $VAR2 -o $VAR2 -gt $VAR3 ]
> then
> echo True
> else
> echo False
> fi
True

AND, OR ์—ฐ์‚ฐ - ๊ธฐํ˜ธ ์—ฐ์‚ฐ์ž์™€ ๋‹จ์ผ ๋Œ€๊ด„ํ˜ธ[]๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ

~$ VAR1=10; VAR2=20; VAR3=30
~$ if [ $VAR1 -lt $VAR2 ] && [ $VAR2  -gt $VAR3 ]
> then
> echo True
> else
> echo False
> fi
False
~$ if [ $VAR1 -lt $VAR2 ] || [ $VAR2 -gt $VAR3 ]
> then
> echo True
> else
> echo False
> fi
True

์กฐ๊ฑด์‹์€ ๋ฌธ์žํ˜• ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  AND, OR ์—ฐ์‚ฐ๋งŒ ๊ธฐํ˜ธ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์กฐ๊ฑด์‹๋ณ„๋กœ ๋‹จ์ผ ๋Œ€๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉ ํ•ด์•ผ ํ•จ.

AND, OR ์—ฐ์‚ฐ - ๊ธฐํ˜ธ ์—ฐ์‚ฐ์ž์™€ ์ค‘์ฒฉ ๋Œ€๊ด„ํ˜ธ[[]]๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ

~$ VAR1=10; VAR2=20; VAR3=30
~$ if [[ $VAR1 -lt $VAR2 && $VAR2 -gt $VAR3 ]]
> then
> echo True
> else
> echo False
> fi
False
~$ if [[ $VAR1 -lt $VAR2 || $VAR2 -gt $VAR3 ]]
> then
> echo True
> else
> echo False
> fi
True

AND, OR ์—ฐ์‚ฐ - ์กฐ๊ฑด์‹๋„ ๊ธฐํ˜ธ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ

~$ VAR1=10; VAR2=20; VAR3=30
~$ if (( $VAR1 < $VAR2 )) && (( $VAR2 > $VAR3 ))
> then
> echo True
> else
> echo False
> fi
False
~$ if (( $VAR1 < $VAR2 || $VAR2 > $VAR3 ))
> then
> echo True
> else
> echo False
> fi
True

๋ชจ๋‘ ๊ธฐํ˜ธ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์—๋Š” ๋Œ€๊ด„ํ˜ธ๊ฐ€ ์•„๋‹Œ ์ค‘์ฒฉ ์†Œ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ ๊ฐ€๋Šฅ.

๋””๋ ‰ํ„ฐ๋ฆฌ ์—ฐ์‚ฐ์ž

๋ณ€์ˆ˜ ์œ ํ˜•์ด ๋””๋ ‰ํ„ฐ๋ฆฌ์ผ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์ž.
ํŠน์ • ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด์˜ ํŒŒ์ผ ๋ชฉ๋ก ์ค‘์— ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ์ฒดํฌํ•  ๊ฒฝ์šฐ ๋งค์šฐ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.
๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด์— ๋””๋ ‰ํ„ฐ๋ฆฌ๋‚˜ ํŒŒ์ผ์ด ์žˆ๋Š”์ง€๋„ ํ™•์ธ ๊ฐ€๋Šฅ.

์—ฐ์‚ฐ์ž ์‚ฌ์šฉ๋ฒ• ์„ค๋ช…
-d if [ -d $๋ณ€์ˆ˜ ] ๋ณ€์ˆ˜ ์œ ํ˜•์ด ๋””๋ ‰ํ„ฐ๋ฆฌ์ด๋ฉด ์ฐธ
-e if [-e $๋ณ€์ˆ˜ ] ๋ณ€์ˆ˜ ์œ ํ˜•์ด ๋””๋ ‰ํ„ฐ๋ฆฌ์ด๊ฑฐ๋‚˜ ํŒŒ์ผ์ด๋ฉด ์ฐธ

๋””๋ ‰ํ„ฐ๋ฆฌ ์—ฐ์‚ฐ

# ํ™˜๊ฒฝ๋ณ€์ˆ˜ HOME์˜ ๊ฐ’์ด ๋””๋ ‰ํ„ฐ๋ฆฌ๋ผ๋ฉด True, ์•„๋‹ˆ๋ฉด False ์ถœ๋ ฅ
~$ if [ -d $HOME ]; then echo True; else echo False; fi
True
# ํ™˜๊ฒฝ๋ณ€์ˆ˜ HOME ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด์— a.txt ํŒŒ์ผ์ด ์žˆ์œผ๋ฉด True, ์•„๋‹ˆ๋ฉด False ์ถœ๋ ฅ
~$ if [ -e $HOME ]; then echo True; else echo False; fi
True

 

ํŒŒ์ผ ์—ฐ์‚ฐ์ž

ํŒŒ์ผ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์†์„ฑ๋“ค์„ ์ฒดํฌํ•˜๋Š” ์—ฐ์‚ฐ์ž.

์—ฐ์‚ฐ์ž ์‚ฌ์šฉ๋ฒ• ์„ค๋ช…
-f if [ -f $๋ณ€์ˆ˜ ] ๋ณ€์ˆ˜ ์œ ํ˜•์ด ํŒŒ์ผ์ด๋ฉด ์ฐธ
-L if [ -L $๋ณ€์ˆ˜ ] ๋ณ€์ˆ˜ ์œ ํ˜•์ด ํŒŒ์ผ์ด๋ฉด์„œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์ด๋ฉด ์ฐธ
-r if [ -r $๋ณ€์ˆ˜ ] ๋ณ€์ˆ˜ ์œ ํ˜•์ด ํŒŒ์ผ์ด๊ฑฐ๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์ด๋ฉด์„œ ์ฝ๊ธฐ ๊ถŒํ•œ์ด ์žˆ์œผ๋ฉด ์ฐธ
-w if [ -w $๋ณ€์ˆ˜ ] ๋ณ€์ˆ˜ ์œ ํ˜•์ด ํŒŒ์ผ์ด๊ฑฐ๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์ด๋ฉด์„œ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ์œผ๋ฉด ์ฐธ
-x if [ -x $๋ณ€์ˆ˜ ] ๋ณ€์ˆ˜ ์œ ํ˜•์ด ํŒŒ์ผ์ด๊ฑฐ๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์ด๋ฉด์„œ ์‹คํ–‰ ๊ถŒํ•œ์ด ์žˆ์œผ๋ฉด ์ฐธ
-s if [ -s $๋ณ€์ˆ˜ ] ๋ณ€์ˆ˜ ์œ ํ˜•์ด ํŒŒ์ผ์ด๊ฑฐ๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์ด๋ฉด์„œ ์‚ฌ์ด์ฆˆ๊ฐ€ 0๋ณด๋‹ค ํฌ๋ฉด ์ฐธ
-O if [ -O $๋ณ€์ˆ˜ ] ๋ณ€์ˆ˜ ์œ ํ˜•์ด ํŒŒ์ผ์ด๊ฑฐ๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์ด๋ฉด์„œ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์†Œ์œ ์ž์™€ ๋™์ผํ•˜๋ฉด ์ฐธ
-G if [ -G $๋ณ€์ˆ˜ ] ๋ณ€์ˆ˜ ์œ ํ˜•์ด ํŒŒ์ผ์ด๊ฑฐ๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์ด๋ฉด์„œ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ๊ทธ๋ฃน๊ณผ ๋™์ผํ•˜๋ฉด ์ฐธ

ํŒŒ์ผ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•  ๊ฒฝ์šฐ

~$ ls -l /etc/localtime
lrwxrwxrwx 1 root root 30 May 31 18:27 /etc/localtime -> /usr/share/zoneinfo/Asia/Seoul
~$ ls -l /usr/share/zoneinfo/Asia/Seoul
-rw-r--r-- 1 root root 617 Mar 27 02:28 /usr/share/zoneinfo/Asia/Seoul
~$ FILE=/etc/localtime
~$ if [ -f $FILE ]; then echo True; else echo False; fi
True
~$ if [ -L $FILE ]; then echo True; else echo False; fi
True

ํŒŒ์ผ ๊ถŒํ•œ์„ ์ฒดํฌํ•  ๊ฒฝ์šฐ

~$ ls -l /etc/localtime
lrwxrwxrwx 1 root root 30 May 31 18:27 /etc/localtime -> /usr/share/zoneinfo/Asia/Seoul
~$ ls -l /usr/share/zoneinfo/Asia/Seoul
-rw-r--r-- 1 root root 617 Mar 27 02:28 /usr/share/zoneinfo/Asia/Seoul
~$ if [ -O $FILE ]; then echo True; else echo False; fi
False
~$ if [ -G $FILE ]; then echo True; else echo False; fi
False
~$ su -
~# if [ -O $FILE ]; then echo True; else echo False; fi
True
~# if [ -G $FILE ]; then echo True; else echo False; fi
True

ํŒŒ์ผ ๋น„๊ต ์—ฐ์‚ฐ์ž

๋‘ ๊ฐœ์˜ ๋ณ€์ˆ˜์— ์ •์˜๋œ ํŒŒ์ผ์„ ๋น„๊ตํ•˜๋Š” ์—ฐ์‚ฐ์ž.
์–ด๋–ค ํŒŒ์ผ์ด ๋” ์ตœ๊ทผ์— ์ƒ์„ฑ๋œ ๊ฒƒ์ธ์ง€, ์–ด๋–ค ํŒŒ์ผ์ด ๋” ์˜ค๋ž˜๋œ ํŒŒ์ผ์ธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ.

์—ฐ์‚ฐ์ž ์‚ฌ์šฉ๋ฒ• ์„ค๋ช…
-nt if [ $๋ณ€์ˆ˜1 -nt $๋ณ€์ˆ˜2 ] ๋ณ€์ˆ˜ ์œ ํ˜•์ด ํŒŒ์ผ์ด๋ฉด์„œ, ๋ณ€์ˆ˜1์ด ๋ณ€์ˆ˜2๋ณด๋‹ค ์ตœ์‹  ํŒŒ์ผ์ด๋ฉด ์ฐธ
-ot if [ $๋ณ€์ˆ˜1 -ot $๋ณ€์ˆ˜2 ] ๋ณ€์ˆ˜ ์œ ํ˜•์ด ํŒŒ์ผ์ด๋ฉด์„œ, ๋ณ€์ˆ˜1์ด ๋ณ€์ˆ˜2๋ณด๋‹ค ์ด์ „ ํŒŒ์ผ์ด๋ฉด ์ฐธ
-ef if [ $๋ณ€์ˆ˜1 -ef $๋ณ€์ˆ˜2 ] ๋ณ€์ˆ˜ ์œ ํ˜•์ด ํŒŒ์ผ์ด๋ฉด์„œ, ๋ณ€์ˆ˜1๊ณผ ๋ณ€์ˆ˜2๊ฐ€ ๋™์ผ ํŒŒ์ผ์ด๋ฉด ์ฐธ

ํŒŒ์ผ์„ ๋น„๊ตํ•  ๋•Œ

~$ echo "AAA" > first.txt
~$ echo "BBB" > second.txt
~$ FILE1=first.txt; FILE2=second.txt
# FILE1์ด FILE2๋ณด๋‹ค ์ตœ์‹  ํŒŒ์ผ์ด๋ฉด True, ์•„๋‹ˆ๋ฉด False, FIlE1์„ ๋จผ์ € ์ƒ์„ฑํ–ˆ์œผ๋ฏ€๋กœ False ์ถœ๋ ฅ
~$ if [ $FILE1 -nt $FILE2 ]; then echo True; else echo False; fi
False
# FILE1์ด FILE2๋ณด๋‹ค ์˜ˆ์ „ ํŒŒ์ผ์ด๋ฉด True, ์•„๋‹ˆ๋ฉด False, FIlE1์„ ๋จผ์ € ์ƒ์„ฑํ–ˆ์œผ๋ฏ€๋กœ True ์ถœ๋ ฅ
~$ if [ $FILE1 -ot $FILE2 ]; then echo True; else echo False; fi
True
# ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋กœ ์—ฐ๊ฒฐ๋œ ๋‘ ๊ฐœ์˜ ํŒŒ์ผ๋ช…์„ ๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜์— ์ €์žฅ
~$ FILE1=/etc/localtime
~$ FILE2=/usr/share/zoneinfo/Asia/Seoul
# FILE1๊ณผ FILE2๋Š” ๋™์ผํ•œ ํŒŒ์ผ์ด๋ฉด True, ์•„๋‹ˆ๋ฉด False, ๋™์ผํ•œ ํŒŒ์ผ์ด๋ฏ€๋กœ True ์ถœ๋ ฅ
~$ if [ $FILE1 -ef $FILE2 ]; then echo True; else echo False; fi
True

๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ž -n ์˜ˆ์ œ ์‹ค์ œ๋กœ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†์–ด๋„ True๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ ์›์ธ์ด ๋ญ˜๊นŒ...

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Linux' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Linux] ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๋Š” ๋ฆฌ๋ˆ…์Šค ๋ช…๋ น์–ด - grep  (0) 2025.06.02
[Linux] Shell Script ๊ธฐ์ดˆ ๋ฌธ๋ฒ• - ์ •๊ทœ ํ‘œํ˜„์‹  (0) 2025.06.01
[Linux] Shell Script ๊ธฐ์ดˆ ๋ฌธ๋ฒ• - ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ  (1) 2025.05.21
[Linux] Shell Script ๊ธฐ์ดˆ ๋ฌธ๋ฒ• - ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ(2)  (1) 2025.05.06
[Linux] Shell Script ๊ธฐ์ดˆ ๋ฌธ๋ฒ• - ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ(1)  (0) 2025.04.26
'Linux' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Linux] ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๋Š” ๋ฆฌ๋ˆ…์Šค ๋ช…๋ น์–ด - grep
  • [Linux] Shell Script ๊ธฐ์ดˆ ๋ฌธ๋ฒ• - ์ •๊ทœ ํ‘œํ˜„์‹
  • [Linux] Shell Script ๊ธฐ์ดˆ ๋ฌธ๋ฒ• - ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ
  • [Linux] Shell Script ๊ธฐ์ดˆ ๋ฌธ๋ฒ• - ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ(2)
The Engineer, Lucy
The Engineer, Lucy
  • The Engineer, Lucy
    Growing up for My Future๐Ÿ’•
    The Engineer, Lucy
    • Instagram
    • GitHub
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (173)
      • Linux (26)
      • Infra (9)
      • Cloud (25)
        • AWS (2)
        • GCP (3)
        • Docker (4)
        • Kubernetes (14)
        • IaC (2)
      • NGINX (1)
      • DevOps (3)
      • Computer Science (17)
        • Data Structure (0)
        • Algorithms (1)
        • Operating System (3)
        • Network (11)
        • Database System (2)
      • Coding Test (87)
        • Algorithms (79)
        • SQL (7)
      • ETC (5)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๊ณต์ง€์‚ฌํ•ญ

  • ๋งํฌ

    • Lucy's Instagram
    • Lucy's GitHub
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    K8s
    network
    ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 2๊ธ‰
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๊ณต๋ถ€
    Kubernetes
    ์…ธ ์Šคํฌ๋ฆฝํŠธ
    ์‰˜ ์Šคํฌ๋ฆฝํŠธ
    ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค
    ๋„์ปค
    ๋ฆฌ๋ˆ…์Šค
    ์˜ค๋ธ”์™„
    cs ๊ธฐ์ดˆ ์ง€์‹ ์ •๋ฆฌ
    programmers
    Java
    ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ์ž๋ฐ”
    dfs
    ํ‹ฐ์Šคํ† ๋ฆฌ์ฑŒ๋ฆฐ์ง€
    Baekjoon
    Linux
    docker
    Shell
    ๋ฐฑ์ค€
    ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰
    ๋„คํŠธ์›Œํฌ ๊ธฐ์ดˆ ์ง€์‹
    Shell Script
    bfs
    ๋„คํŠธ์›Œํฌ
    ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
The Engineer, Lucy
[Linux] Shell Script ๊ธฐ์ดˆ ๋ฌธ๋ฒ• - ์—ฐ์‚ฐ์ž
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”