๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Linux

[Linux] ์…ธ ์Šคํฌ๋ฆฝํŠธ ๊ธฐ์ดˆ์™€ ํ™œ์šฉํ•˜๊ธฐ

๋ฐ˜์‘ํ˜•

๐Ÿ”Š ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋ชจ๋‘์˜ ๋ฆฌ๋ˆ…์Šค ์„œ์ ์˜ ๋‚ด์šฉ์„ ์ฝ๊ณ  ๊ฐœ์ธ์ ์ธ ์ •๋ฆฌ ๋ชฉ์  ํ•˜์— ์ž‘์„ฑ๋œ ๊ธ€์ž„์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค. ํฌ์ŠคํŒ… ๋‚ด์šฉ์˜ ๊ธฐ๋ฐ˜ ๋‚ด์šฉ์€ ํ•ด๋‹น ์„œ์ ์— ๊ธฐ๋ฐ˜ํ•˜์˜€์œผ๋ฉฐ ๋‚ด์šฉ ์ž์ฒด๋Š” ์ œ๊ฐ€ ์ง์ ‘ ์žฌ๊ตฌ์„ฑํ–ˆ์Œ์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.

 

๋ฆฌ๋ˆ…์Šค ํ„ฐ๋ฏธ๋„ ํ™”๋ฉด


์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ž€ ๋ฌด์—‡์ด๊ณ , ์…ธ ์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ์ดˆ์™€ ๋”๋ถˆ์–ด ๊ธฐ์ดˆ๋ฅผ ์Œ“์€ ๋’ค ์ž˜ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž. ๊ฐ€์žฅ ๋จผ์ € ์…ธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ฐœ๋…์ ์œผ๋กœ ๋ฐฐ์›Œ๋ณด๋„๋ก ํ•˜์ž.

1. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ช…๋ น์–ด๋ฅผ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜์ž, ์…ธ ์Šคํฌ๋ฆฝํŠธ!

์…ธ ์Šคํฌ๋ฆฝํŠธ๋ž€, ์…ธ์—์„œ ์‹คํ–‰๋  ํ•˜๋‚˜ ๋˜๋Š” ๊ทธ ์ด์ƒ์˜ ์ปค๋งจ๋“œ ๋ผ์ธ์„ ์ž…๋ ฅํ•ด ๋†“์€ ํŒŒ์ผ์ด๋‹ค. ๋‹จ์ˆœํžˆ ๋ช…๋ น์–ด๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด์„œ์„œ ์กฐ๊ฑด ๋ถ„๊ธฐ, ๋ฐ˜๋ณต๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ์ œ์–ด๊ตฌ์กฐ๋„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งˆ์น˜ Python ์ด๋‚˜ Java ๊ฐ™์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ฒ˜๋Ÿผ ๋ง์ด๋‹ค. 

 

๊ทธ๋Ÿฐ๋ฐ ์…ธ ์Šคํฌ๋ฆฝํŠธ์—์„œ์˜ '์…ธ'์ด๋ž€ ์šฐ๋ฆฌ๊ฐ€ ๋งจ ์ฒ˜์Œ์— ์•Œ์•„๋ณธ bash, sh, zsh ๋“ฑ ๋‹ค์–‘ํ•œ ์…ธ ์ข…๋ฅ˜ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์…ธ ์ค‘์— ๊ณผ์—ฐ ์–ด๋–ค ๊ฒƒ์„ ์„ ํƒํ•ด์•ผ ํ•˜๋Š”์ง€๋Š” ์ค‘์š”ํ•œ ๋ฌธ์ œ์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์…ธ ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ทธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์…ธ์ด ์ˆ˜ํ–‰ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์…ธ์— ๋”ฐ๋ผ ์…ธ ์Šคํฌ๋ฆฝํŠธ์— ์“ฐ์—ฌ์ง€๋Š” ๋ฌธ๋ฒ•์ด ๋‹ฌ๋ผ์ง„๋‹ค. 

 

์ด์ „์—๋Š” ๊ธด ์—ญ์‚ฌ๋ฅผ ๊ฐ€์ง„ sh ๋ผ๋Š” ์…ธ์ด ํ˜ธํ™˜์„ฑ๊ณผ ์ด์‹์„ฑ์ด ์ค‘์š”ํ•˜๋‹ค๋ฉด ์„ ํ˜ธ๋˜๋Š” ์…ธ์ด์˜€์ง€๋งŒ ์š”์ฆ˜์—๋Š” bash๊ฐ€ sh ๋ณด๋‹ค ๋” ๊ถŒ์žฅํ•˜๋Š” ๋Œ€์„ธ์ด๋‹ค. ์ด์— ๋Œ€ํ•œ ์ด์œ ๋Š” 2๊ฐ€์ง€์ด๋‹ค.

 

์ฒซ์งธ๋กœ, sh๋กœ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•ด๋„ ํ˜ธํ™˜์„ฑ์˜ ๋ฌธ์ œ๋Š” ์—ฌ์ „ํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. CentOS ๊ฐ™์€ ๋ ˆ๋“œํ–‡ ๊ณ„์—ด์˜ ๋ฆฌ๋ˆ…์Šค ๋ฐฐํฌํŒ์—์„œ๋Š” sh๋Š” bash์˜ ๋ณ„๋ช…์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค. ์ฆ‰, ์‹ค์ฒด๋Š” bash๋ผ๋Š” ๊ฒƒ์ด๋‹ค.(๋ฌผ๋ก  CentOS์—์„œ sh๋ฅผ ์‹คํ–‰ํ•˜๋ฉด bash๊ฐ€ sh ๋ชจ๋“œ๋กœ ๋™์ž‘ํ•ด์„œ ๋™์ž‘์ด ์•ฝ๊ฐ„ ๋ณ€ํ•˜๊ธด ํ•œ๋‹ค๊ณ  ํ•จ) ๋ฐ˜๋ฉด, ์šฐ๋ถ„ํˆฌ์™€ ๊ฐ™์€ ๋ฐ๋น„์•ˆ ๊ณ„์—ด์—์„œ๋Š” sh๊ฐ€ bash ์…ธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ์ฆ‰, ๊ฒ‰ํฌ์žฅ์ง€๋Š” sh์ด์ง€๋งŒ ๋™์ž‘ํ•˜๋Š” ์‹ค์ฒด์ ์ธ ์…ธ์€ ๋ฆฌ๋ˆ…์Šค ๋ฐฐํฌํŒ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ณ  ๋™์ž‘๋„ ๋‹ฌ๋ผ์ง„๋‹ค. ์ด๋Ÿฌํ•œ sh์˜ ํŠน์„ฑ์— ๋ฐ˜ํ•ด, bash๋Š” GNU ํ”„๋กœ์ ํŠธ๋ผ๋Š” ๊ฒƒ์— ์˜ํ•œ ๊ตฌํ˜„์ฒด ๋ฐ–์— ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด ๋ง์€ ๊ณง ์–ด๋–ค ์šด์˜์ฒด์ œ์—ฌ๋„ bash๋Š” ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ตœ๊ทผ ๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” bash๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์น˜๋˜๊ธฐ ๋•Œ๋ฌธ์— bash๊ฐ€ sh๋ณด๋‹ค ํ˜ธํ™˜์„ฑ, ์ด์‹์„ฑ์ด ๋‚ฎ๋‹ค๊ณ  ํ•˜๋Š” ๋ง์€ ์˜›๋‚  ์ด์•ผ๊ธฐ์ธ ๋“ฏ ํ•˜๋‹ค.

 

๋‘๋ฒˆ์งธ๋กœ๋Š” bash์—๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์œ„ํ•œ ํ’๋ถ€ํ•œ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋ฐ˜๋ฉด์— sh๋Š” ๊ธด ์—ญ์‚ฌ๋ฅผ ๊ฐ€์ง€๊ธด ํ–ˆ์ง€๋งŒ bash ๋ณด๋‹ค ๋งŽ์€ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค. ์ผ๋ก€๋กœ, bash์—์„œ ์ˆซ์ž 1๋งŒํผ ๋”ํ•˜๋Š” ์—ฐ์‚ฐ์„ ํ•  ๋•Œ, sh๋Š” expr์ด๋ผ๋Š” ์™ธ๋ถ€ ๋ช…๋ น์–ด๋ฅผ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

์šฐ์„  ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ๋‚ด์šฉ์˜ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ homesize.sh ์ด๋ผ๋Š” ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด๋ณด์ž.

 

#!/bin/bash
du -h ~/Desktop | tail -n 1

 

์œ„ ๋ช…๋ น์–ด๋Š” ~/Desktop ์ด๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ํŒŒ์ผ ์‚ฌ์šฉ๋Ÿ‰์„ ์ถœ๋ ฅํ•˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค. ์ฐธ๊ณ ๋กœ ์…ธ ์Šคํฌ๋ฆฝํŠธ์˜ ํŒŒ์ผ ํ™•์žฅ์ž๋ช…์ธ 'sh'๋ฅผ ๋ถ™์ด์ง€ ์•Š์•„๋„ ๋™์ž‘ํ•˜์ง€๋งŒ ๋ณดํ†ต ํŒŒ์ผ ์ด๋ฆ„๋งŒ ๋ด๋„ ์…ธ ์Šคํฌ๋ฆฝํŠธ์ธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด 'sh' ํ™•์žฅ์ž๋ช…์„ ๋ถ™์ด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๋˜ํ•œ ํŒŒ์ผ ๋‚ด์šฉ์ค‘ ๊ฐ€์žฅ ์œ—์ค„์— #! ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ถ€๋ถ„์€ '์…”๋ฑ…(shebang)' ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ด์— ๋Œ€ํ•œ ์„ค๋ช…์€ ํ›„๋ฐ˜๋ถ€์— ํ•˜๊ธฐ๋กœ ํ•˜๊ณ  ์šฐ์„  ๋„˜์–ด๊ฐ€์ž. ์œ„์ฒ˜๋Ÿผ ๋งŒ๋“  ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ ค๋ฉด ์šฐ์„  ์‹คํ–‰๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ํ•ด๋‹น ํŒŒ์ผ์˜ ๊ถŒํ•œ ์ƒํƒœ๋ฅผ ์•„๋ž˜์ฒ˜๋Ÿผ ๋ณด๋ฉด ์†Œ์œ ์ž, ์†Œ์œ ๊ทธ๋ฃน, ๊ธฐํƒ€ ์‚ฌ์šฉ์ž ๋ชจ๋‘ ์‹คํ–‰ ๊ถŒํ•œ์ด ์ œํ•œ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

์šฐ์„  "๋‚˜๋งŒ ์‹คํ–‰ํ•˜๋„๋ก" ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์†Œ์œ ์ž์—๊ฒŒ๋งŒ ์‹คํ–‰๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด๋ณด๋„๋ก ํ•˜์ž. ์—ฌ๊ธฐ์„œ๋Š” ์ƒ๋Œ€์ ์ธ ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด๋ณด๋„๋ก ํ•˜์ž. ํ˜น์‹œ ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ต์ˆ™ํ•˜์ง€ ์•Š๋‹ค๋ฉด ์ด์ „ ํฌ์ŠคํŒ…์„ ์ฝ๊ณ ์˜ค์ž. ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ ํ›„, ๋‹ค์‹œ ํŒŒ์ผ์˜ ๊ถŒํ•œ ์ •๋ณด๋ฅผ ์‚ดํŽด๋ณด์ž.

 

chmod u+x homesize.sh

 

์†Œ์œ ์ž ๊ถŒํ•œ์—๋งŒ x(์‹คํ–‰๊ถŒํ•œ)๊ฐ€ ๋ถ€์—ฌ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Œ

 

์ด์ œ ํ•ด๋‹น ์…ธ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค. ์ด ๋•Œ, ์…ธ์—๊ฒŒ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ./ ํ˜•ํƒœ๋กœ ๋ฐ˜๋“œ์‹œ ์•Œ๋ ค์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

./homesize.sh

 

๋‹ค์Œ์œผ๋กœ ๋ฐฉ๊ธˆ ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋˜ ์…”๋ฑ…์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ์…”๋ฑ…์€ ์…ธ ์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ ํ–‰์— #! ๋กœ ์‹œ์ž‘๋˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. ์ด ์…”๋ฑ…์„ ์•Œ์ง€ ๋ชปํ•˜๋ฉด ํŠน์ • ํ™˜๊ฒฝ์—์„œ ์…ธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด ์…”๋ฑ…์ด ์–ด๋–ค ์…ธ์„ ์ด์šฉํ•ด์„œ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ์ง€ ์„ ์–ธํ•˜๋Š” ๋ถ€๋ถ„์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด์ œ ๋””ํ…Œ์ผํ•˜๊ฒŒ ์•Œ์•„๋ณด์ž. ์•„๋ž˜์™€ ๊ฐ™์€ ์…ธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

 

#!/bin/bash
du -h ~/Destkop | tail -n 1

 

์œ„ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด ๊ฐ€์žฅ ๋จผ์ € ์…ธ์˜ ์‹คํ–‰ ๋ช…๋ น์„ ์ „๋‹ฌ๋ฐ›์€ ๋ฆฌ๋ˆ…์Šค ์ปค๋„์ด ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์˜ ์ฒซ ๋ถ€๋ถ„์„ ํ™•์ธํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ถ€๋ถ„์— #! ๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ ๋’ค์—์ ํžŒ ๋ช…๋ น์–ด ์ฆ‰, ์œ„ ์ฝ”๋“œ์—์„œ๋Š” /bin/bash ๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ฒฐ๊ตญ ์œ„ ์ฝ”๋“œ์—์„œ์˜ ์…”๋ฑ… ์ฆ‰, #!/bin/bash ์˜ ์˜๋ฏธ๋Š” "์ด ์…ธ ์Šคํฌ๋ฆฝํŠธ๋Š” /bin/bash๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•œ ๊ฒƒ์ด์•ผ!"๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์…”๋ฑ…์ด ์ ํ˜€์ง„ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ๋ฆฌ๋ˆ…์Šค ์ปค๋„์ด ํ™•์žฅ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

# ์‚ฌ์šฉ์ž๊ฐ€ ์…ธ ์Šคํฌ๋ฆฝํŠธ์„ ์‹คํ–‰ํ•œ ๋ช…๋ น์–ด
./homesize.sh

# ์œ„ ๋ช…๋ น์–ด๋ฅผ ๋ฆฌ๋ˆ…์Šค ์ปค๋„์ด ํ™•์žฅํ•œ ๋ช…๋ น์–ด
/bin/bash ./homesize.sh

 

์ด๋ ‡๊ฒŒ ์…”๋ฑ…์„ ์ž…๋ ฅํ•˜๋ฉด ํฌ๊ฒŒ 2๊ฐ€์ง€ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ๊ท€์ฐฎ๊ฒŒ(?) ๋ช…๋ น์–ด์— /bin/bash ๋ฅผ ์ ์–ด์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ๋‘ ๋ฒˆ์งธ๋Š” ๋‚ด๊ฐ€ ๋กœ๊ทธ์ธํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์…ธ์ด bash๊ฐ€ ์•„๋‹Œ sh, zsh ์…ธ์ด์—ฌ๋„ ์ €๋ ‡๊ฒŒ bash ์…”๋ฑ…์ด ์ ํ˜€์žˆ๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋Š” bash ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ์ฐธ๊ณ ๋กœ ์…ธ์—์„œ๋Š” #์„ ์ฃผ์„์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์…”๋ฑ…๋„ ์ฃผ์„์œผ๋กœ ๊ฐ„์ฃผ๋˜๊ธด ํ•˜์ง€๋งŒ ์…ธ ์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ ํ–‰์— ํ•œํ•ด์„œ๋งŒ #! ๊ฐ€ ์žˆ๋Š”์ง€ ์…ธ์ด ํ™•์ธํ•˜๊ฒŒ ๋œ๋‹ค.

 

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

 

source ./homesize-noshebang.sh

 

source ๋ช…๋ น์–ด๋Š” ๋ง๊ทธ๋Œ€๋กœ ์ง€์ •ํ•œ ํŒŒ์ผ ์•ˆ์˜ ์ปค๋งจ๋“œ ๋ผ์ธ์„ ๋งˆ์น˜ ์…ธ์—์„œ ์ง์ ‘ ์ž…๋ ฅํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•˜๊ฒŒ ์‹คํ–‰ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์–ธ์ œ๋‚˜ ํ˜„์žฌ ์…ธ์ด ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„์—์„œ ์•Œ์•„๋ณธ ๋ฐฉ๋ฒ•๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ํŒŒ์ผ์— ์‹คํ–‰ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ์…ธ์„ ์‹คํ–‰ํ•˜๋Š” 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋‚˜์—ดํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

์…ธ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ• ํŠน์ง•
./shell_script.sh ์…”๋ฑ…์— ๋ช…์‹œํ•œ ์…ธ๋กœ ์‹คํ–‰๋˜๋ฏ€๋กœ ์…”๋ฑ…์„ ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ๋ช…์‹œํ•ด์•ผ ํ•จ ํ˜„์žฌ ๋กœ๊ทธ์ธํ•œ ์…ธ๊ณผ ๋ณ„๊ฐœ์˜ ์ƒˆ๋กœ์šด ์…ธ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ํŒŒ์ผ์— ์‹คํ–‰๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์ฃผ์–ด์•ผ ํ•จ
bash ./shell_script.sh ์…ธ์˜ ์ธ์ž๋กœ ์ง€์ •ํ•˜์—ฌ ์‹คํ–‰ ์…”๋ฑ…์„ ๊ธฐ์žฌํ•˜์ง€ ์•Š์•„๋„ ๋จ.์™œ๋ƒ? ์ด๋ฏธ bash๋ฅผ ์“ธ ๊ฒƒ์ด๋ผ๊ณ  ๋ช…๋ น์–ด์— ์„ ์–ธํ•ด์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ
source ./shell_script.sh ๋ฌด์กฐ๊ฑด ํ˜„์žฌ ์‚ฌ์šฉ์ค‘์ธ ์…ธ๋กœ ์‹คํ–‰๋จ ๊ทธ๋ž˜์„œ ํ•ด๋‹น ํŒŒ์ผ์— ๋ณ„๋„์˜ ์‹คํ–‰ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜์ง€ ์•Š์•„๋„ ๋จ
(bash,zsh)์— ํ•œํ•˜์—ฌ...
source ๋Š” . ๊ณผ ๋™์ผํ•œ ์˜๋ฏธ๋ฅผ ์ง€๋‹˜
ex) . ./shell_script.sh ๋„ ๋˜‘๊ฐ™์Œ

 

1๋ฒˆ์˜ ๊ฒฝ์šฐ, ์…”๋ฑ…์„ ๊ธฐ์žฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ๋งŒ ๋นผ๊ณ ๋Š” 2๋ฒˆ๊ณผ ๊ฑฐ์˜ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค. 3๋ฒˆ์˜ ๊ฒฝ์šฐ์—๋Š” 1,2๋ฒˆ๊ณผ ๋™์ž‘์ƒ์˜ ์ฐจ์ด์ ์ด ์žˆ๋‹ค. ๋ฐ”๋กœ 3๋ฒˆ์€ ํ˜„์žฌ ์…ธ์„ ๊ธฐ์ค€์œผ๋กœ ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ํ˜„์žฌ ์„ค์ •๋œ ์…ธ ํ™˜๊ฒฝ์— ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ˜„์žฌ ์…ธ์— ์ €์žฅํ•œ ๋ณ„๋ช…์ด๋‚˜ ์…ธ ๋ณ€์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ์…ธ ์Šคํฌ๋ฆฝํŠธ ์•ˆ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ๋ฐ˜๋ฉด์— 1,2๋ฒˆ์˜ ๊ฒฝ์šฐ์— ํ˜„์žฌ ๋กœ๊ทธ์ธํ•œ ์…ธ์—์„œ ์˜ˆ๋ฅผ ๋“ค์–ด, $VAR ์ด๋ผ๋Š” ์…ธ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ–ˆ์„์ง€๋ผ๋„ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์…ธ์€ ๋ณ„๋„(์ด๋ฅผ ํ˜„์žฌ ์…ธ์—์„œ ์ƒˆ๋กญ๊ฒŒ ์‹คํ–‰๋œ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋กœ์„œ์˜ ์…ธ์ด๋ผ๊ณ  ํ•ด์„œ '์„œ๋ธŒ ์…ธ'์ด๋ผ๊ณ  ๋ถ€๋ฆ„)์˜ ์„œ๋ธŒ ์…ธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๊ทธ์ธํ•œ ์…ธ์—์„œ ์ •์˜ํ•œ VAR ๋ณ€์ˆ˜๋ฅผ ๊ฐ–๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค. ๋‹จ, ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ๋ชจ๋“  ํ˜„์žฌ ์‚ฌ์šฉ์ค‘์ธ ์…ธ๊ณผ ์„œ๋ธŒ ์…ธ ๊ฐ„์— ์ ‘๊ทผ์ด ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ๋„ ์žŠ์ง€๋ง์ž!

 

๊ทธ๋ ‡๋‹ค๋ฉด 3๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ์–ด๋–ค ๊ฒƒ์ด ๊ฐ€์žฅ ๊ถŒ๊ณ ๋ ๊นŒ? ์ผ๋ฐ˜์ ์œผ๋กœ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋Š” 3๋ฒˆ ๋ฐฉ๋ฒ• ์ฆ‰, source ๋ช…๋ น์–ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ง€์–‘ํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด 1,2๋ฒˆ ๋ฐฉ๋ฒ•์€ ์…”๋ฑ…์—์„œ ์ง€์ •ํ•œ ์…ธ์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋–„๋ฌธ์— ํ˜„์žฌ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์…ธ๋กœ๋ถ€ํ„ฐ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‘ ๋ฒˆ์งธ, source๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ˜„์žฌ ์…ธ์˜ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์…ธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰์ด ์•ˆ๋  ์ˆ˜๋„ ์žˆ๊ณ  ํ˜„์žฌ ์…ธ์˜ ๋ณ€์ˆ˜๊ฐ’์ด๋‚˜ ๋ณ„๋ช…(alias) ๊ฐ’์„ ์‹ค์ˆ˜๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ธฐ๋„ ํ•˜๋‹ค. ๋ฌผ๋ก  source ๋ช…๋ น์–ด๊ฐ€ ์œ ์šฉํ•  ๋•Œ๋„ ์žˆ๋‹ค. ์˜ˆ์ „ ํฌ์ŠคํŒ…์—์„œ ๋ฐฐ์šด ๊ฒƒ์ฒ˜๋Ÿผ ๋ฐฐ์‹œ ์„ค์ • ํŒŒ์ผ(./profile, ~/.bashrc ์™€ ๊ฐ™์€..)์„ ๋ณ€๊ฒฝํ•œ ํ›„ ๋กœ๊ทธ์•„์›ƒํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ ์šฉํ•  ๋•Œ๋Š” source ๋ช…๋ น์–ด๊ฐ€ ๋ฌด์—‡๋ณด๋‹ค ์œ ์šฉํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•ด ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์ž.

 

๋‹ค์Œ์€ ์…ธ ์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์น˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์œผ๋กœ ํŒŒ์ผ๋ช…์„ ์ ์–ด์„œ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์˜๋ฏธํ•˜๋Š” ./ ๋ถ€๋ถ„์„ ๋นผ๋ฉด ์‹คํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. ์™œ์ผ๊นŒ? ๋ฐ”๋กœ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ์—์„œ ๋ช…๋ น์–ด๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์šฐ๋ฆฐ ํŠน์ • ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•  ๋•Œ OS๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•ด๋‹น ๋ช…๋ น์–ด๋“ค์ด ์–ด๋”” ์žˆ๋Š”์ง€ ์ฐพ๋Š” '๊ฒ€์ƒ‰ ๊ฒฝ๋กœ'๋ผ๋Š” ๊ฒŒ ์กด์žฌํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์ด ํ™˜๊ฒฝ๋ณ€์ˆ˜ $PATH์— ์ฝœ๋ก (:)์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์žˆ๋‹ค. ๋‚ด ๋ฆฌ๋ˆ…์Šค์—์„œ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ๋ฅผ ํ•œ๋ฒˆ ๊ทธ๋Ÿผ ์‚ดํŽด๋ณด์ž.

 

 

์ฆ‰, ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์€ ๋˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์…ธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์œ„์™€ ๊ฐ™์€ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ์— ๋“ฑ๋ก๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ์ง€ ์•Š์œผ๋ฉด ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ./ ๋นผ๊ณ  ํŒŒ์ผ ์ด๋ฆ„๋งŒ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ํŒŒ์ผ ์ด๋ฆ„๋งŒ์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์œ„ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ์— ๋“ฑ๋กํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ํ˜„์žฌ ๋‚ด๊ฐ€ ๋งŒ๋“  homesize.sh ๋ผ๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ๋Š” ~/Desktop/work/linux ๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ์— ๋“ฑ๋กํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ๋ฅผ ๋‹ค์‹œ ๊ฒ€์ƒ‰ํ•ด๋ณด๋ฉด ๋ฐฉ๊ธˆ ๋‚ด๊ฐ€ ์ถ”๊ฐ€ํ•œ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ์— ๋“ฑ๋ก๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ PATH ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ๋“ค์–ด์žˆ๋Š” ~/.profile ํŒŒ์ผ์— source ๋ช…๋ น์–ด๋ฅผ ์ทจํ•ด์ค˜์„œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ”๋กœ ์ ์šฉํ•ด์ค€๋‹ค.

 

 

๋‹ค์Œ์€ source ๋ช…๋ น์–ด๋กœ ์‚ฌ์šฉํ•  ๋•Œ ํ•œ ๊ฐ€์ง€ ์ฃผ์˜ํ•  ์ ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. source ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋Š” PATH ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ์ง€์ •๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ผ๋ฉด ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด ์žˆ๋Š” ์ƒ๋Œ€/์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ํŒŒ์ผ ์ด๋ฆ„๋งŒ ๋ช…์‹œํ•ด์„œ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‹ค์ˆ˜๋กœ ์›์น˜ ์•Š์„ ๋•Œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค. ๋”ฐ๋ผ์„œ ์ƒ๋Œ€/์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ž…๋ ฅ์•ผ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ์˜ต์…˜์„ ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ๋น„ํ™œ์„ฑํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

# u๋Š” ๋น„ํ™œ์„ฑํ™”!
shopt -u sourcepath

 

๋ชฉ์ฐจ์˜ ๋งˆ์ง€๋ง‰์œผ๋กœ ssh์™€ ๊ณต๊ฐœํ‚ค ์ธ์ฆ์— ๋Œ€ํ•ด ์ž ๊น ์•Œ์•„๋ณด์ž. ๋œฌ๊ธˆ์—†์ด ๋“ฑ์žฅํ–ˆ์ง€๋งŒ ๋‚ด๊ฐ€ ๋ชฐ๋ž๋˜ ๋‚ด์šฉ์ด๋ผ ๊ธฐ๋กํ•ด๋‘๋ ค ํ•œ๋‹ค. ๋ณดํ†ต ssh๋กœ ๋ฆฌ๋ˆ…์Šค์— ๋กœ๊ทธ์ธํ•  ๋•Œ ์•”ํ˜ธ ์ธ์ฆ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋Ÿฐ ์•”ํ˜ธ ์ธ์ฆ ๋ฐฉ์‹ ์ด์™ธ์— ๊ณต๊ฐœํ‚ค ์ธ์ฆ ๋ฐฉ์‹์ด๋ผ๋Š” ๊ฒŒ ์กด์žฌํ•œ๋‹ค.

 

๊ณต๊ฐœํ‚ค ์ธ์ฆ ๋ฐฉ์‹์€ ssh-keygen ๋ช…๋ น์–ด๋กœ 2๊ฐœ์˜ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ, ํ•˜๋‚˜๋Š” ๋น„๋ฐ€ํ‚ค, ํ•˜๋‚˜๋Š” ๊ณต๊ฐœํ‚ค ํŒŒ์ผ์ด๋‹ค. ์ด ๋•Œ ๊ณต๊ฐœํ‚ค๋Š” ์„œ๋ฒ„์— ๋“ฑ๋กํ•˜๊ณ , ์‚ฌ์šฉ์ž๋Š” ๋น„๋ฐ€ํ‚ค๋ฅผ ์ด์šฉํ•ด์„œ ๋กœ๊ทธ์ธํ•˜๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ๊ณต๊ฐœํ‚ค์— ๋Œ€์‘ํ•˜๋Š” ๋น„๋ฐ€ํ‚ค์—ฌ์•ผ๋งŒ ์ธ์ฆ์— ์„ฑ๊ณตํ•˜๊ฒŒ ๋˜๊ณ  ๋น„๋ฐ€ํ‚ค๋Š” ์„œ๋ฒ„์— ์ „์†กํ•˜์ง€ ์•Š์€ ์ฑ„๋กœ ์ธ์ฆ์ด ์ง„ํ–‰๋œ๋‹ค. ๊ทธ๋ž˜์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ๊ณต๊ฐœํ‚ค ์ธ์ฆ ๋ฐฉ์‹์ด ๋‹จ์ˆœํžˆ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๋” ์•ˆ์ „ํ•˜๋‹ค.

 

๋ฌผ๋ก  ๊ณต๊ฐœํ‚ค ์ธ์ฆ ๋ฐฉ์‹์œผ๋กœ๋งŒ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ssh๋ฅผ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํ˜„์žฌ๋Š” ์ธํ„ฐ๋„ท์„ ๊ฒฝ์œ ํ•ด์„œ ssh๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๊ณต๊ฐœํ‚ค ์ธ์ฆ ๋ฐฉ์‹๋งŒ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋ผ๊ณ  ํ•œ๋‹ค.

2. ์…ธ ์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ์ดˆ ์ง€์‹

์ด๋ฒˆ ๋ชฉ์ฐจ์—๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ์ดˆ ๋ฌธ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค. ์ฐธ๊ณ ๋กœ ์—ฌ๊ธฐ์„œ ๋ฐฐ์šฐ๋Š” ๋ฌธ๋ฒ•์€ ์…ธ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ž‘์„ฑํ•ด๋„ ๋˜์ง€๋งŒ ๋‹จ์ˆœํžˆ ํ„ฐ๋ฏธ๋„์—์„œ ๋ช…๋ น์–ด ํ˜•ํƒœ๋กœ๋„ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์šฐ์„  ์…ธ ์Šคํฌ๋ฆฝํŠธ๋Š” ์ฒซ ๋ฒˆ์งธํ–‰๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ํ•œ ํ–‰์”ฉ ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋œ๋‹ค. ์˜ˆ์‹œ๋กœ ๋“ค๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ 3์ค„์˜ ๋ช…๋ น์–ด๊ฐ€ ์กด์žฌํ•˜๋ฉด 1์ค„์”ฉ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋œ๋‹ค.

 

 

๋งŒ์•ฝ ํ•˜๋‚˜์˜ ์ค„๋กœ ์—ฐ๊ฒฐ ์ง€์œผ๋ ค๋ฉด ์„ธ๋ฏธ์ฝœ๋ก (;)์œผ๋กœ ๋ช…๋ น์–ด๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

๋งŒ์•ฝ ํ•œ ์ค„์˜ ์ปค๋งจ๋“œ ๋ผ์ธ์ด ๋„ˆ๋ฌด ๊ธธ์–ด์ ธ์„œ ๊ฐœํ–‰์„ ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์—ญ์Šฌ๋ž˜์‰ฌ(\)๋กœ ๊ฐœํ–‰์‹œ์ผœ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

 

 

์œ„์— ์‚ฌ์šฉํ•œ ๊ฐœํ–‰ ํ‘œ์‹œ๋Š” ์…ธ์—์„œ ์ปค๋งจ๋“œ ๋ผ์ธ์„ ์ž…๋ ฅํ•  ๋•Œ๋„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ ๊ฐœํ–‰์„ ํ‘œ์‹œํ•˜๋ฉด > ๋ผ๋Š” ํ‘œ์‹œ๊ฐ€ ํ”„๋กฌํ”„ํŠธ์— ํ‘œ์‹œ๋˜๋Š”๋ฐ ์ด๋Š” ์ž…๋ ฅ์ด ๋๋‚˜์ง€ ์•Š์€ ํ”„๋กฌํ”„ํŠธ๋กœ ์„ธ์ปจ๋”๋ฆฌ ํ”„๋กฌํ”„ํŠธ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ด ์„ธ์ปจ๋”๋ฆฌ ํ”„๋กฌํ”„ํŠธ๋ฅผ ํ‘œ์‹œํ•˜๋Š” > ๋ผ๋Š” ๋ฌธ์ž ์ข…๋ฅ˜๋„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ PS2 ์…ธ ๋ณ€์ˆ˜๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹ค์Œ์€ ์ด์ „์— ์•Œ์•„๋ณด์•˜๋˜ ์…ธ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์…ธ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์ฃผ์˜์ ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด์ž.

 

  • ๋Œ€์ž…ํ•  ๋•Œ๋Š” $๋ฅผ ๋ถ™์ด์ง€ ์•Š๋Š”๋‹ค. ์ฐธ์กฐ ์‹œ์—๋งŒ ๋ณ€์ˆ˜๋ช… ์•ž์— ๋ถ™ํžŒ๋‹ค.
  • ๋Œ€์ž… ์‹œ ๋“ฑํ˜ธ(=) ์–‘ ์˜†์— ๊ณต๋ฐฑ์ด ์—†์–ด์•ผ ํ•œ๋‹ค. ex) VAR="Hello world" (O) , VAR = "Hello world" (X)
  • ๋ณ€์ˆ˜๋ช…์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž๋กœ๋Š” ์•ŒํŒŒ๋ฒณ, ์ˆซ์ž, ์–ธ๋”์Šค์ฝ”์–ด(_)์ด๋ฉฐ ์ˆซ์ž๋Š” ์ฒซ ๊ธ€์ž๋กœ๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค. ์ฐธ๊ณ ๋กœ ๋ณดํ†ต ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ๋Š” ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋ฅผ, ์ผ๋ฐ˜ ๋ณ€์ˆ˜์—๋Š” ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค
  • ๋ณ€์ˆ˜๋ฅผ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ {}๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ex) filename="test.txt" ๋ผ๊ณ  ์„ ์–ธํ•œ ๊ฒฝ์šฐ, ํŠน์ • ๋ฌธ์ž์—ด Hello ์™€ ๋ถ™์ด๊ณ  ์‹ถ๋‹ค๋ฉด echo ${filename}Hello ์ด๋ผ๊ณ  ์„ ์–ธํ•ด์•ผ ํ•จ

๋‹ค์Œ์€ ์ฟผํŒ…(Quoting)์— ๋Œ€ํ•ด ๋ฐฐ์›Œ๋ณด์ž. ์ฟผํŒ…์ด๋ž€ ์ž‘์€ ํ˜น์€ ํฐ ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ๋ฐฐ์‹œ์—์„œ๋Š” ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๋ช…๋ น์–ด ์ธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์˜๋„์— ๋งž๊ฒŒ ์ ์ ˆํžˆ ์ฟผํŒ…์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ž‘์€ ํ˜น์€ ํฐ ๋”ฐ์˜ดํ‘œ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ ์‚ฌ์ด์—๋Š” ํฐ ์ฐจ์ด์ ์ด ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘์€ ๋”ฐ์˜ดํ‘œ์•ˆ์—์„œ $๋ฅผ ํ‘œ์‹œํ•˜๋ฉด ์ผ๋ฐ˜ ๋ฌธ์ž์—ด๋กœ ์ทจ๊ธ‰ํ•˜์ง€๋งŒ ํฐ ๋”ฐ์˜ดํ‘œ ์•ˆ์—์„œ๋Š” ํ•ด ๋ณ€์ˆ˜ ๊ฐ’์œผ๋กœ ์น˜ํ™˜์ด ๋œ๋‹ค. ์•„๋ž˜ ํ™”๋ฉด์„ ๋ณด์ž.

 

 

๊ฒฐ๊ณผ ํ™”๋ฉด์„ ๋ณด๋ฉด ์ž‘์€ ๋”ฐ์˜ดํ‘œ์—๋Š” $๋ฌธ์ž๊ฐ€ ๊ทธ๋Œ€๋กœ ํ‘œ์‹œ๋˜์—ˆ์ง€๋งŒ ํฐ ๋”ฐ์˜ดํ‘œ์—๋Š” ์„ ์–ธํ•œ ์…ธ ๋ณ€์ˆ˜๊ฐ€ ์ง์ ‘ ๋‚˜์˜จ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ํฐ ๋”ฐ์˜ดํ‘œ์—์„œ๋„ ๋ฌธ์ž๋ฅผ ๊ทธ๋Œ€๋กœ ํ‘œ์‹œํ•ด์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด ์•ž์— ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž์ธ ์—ญ์Šฌ๋ž˜์‰ฌ(\)๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค.

 

๋‹ค์Œ์€ ๋ช…๋ น์–ด ์น˜ํ™˜์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด๋‹ค. ๊ฐ€๋” ๋ช…๋ น์–ด์˜ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ์ด์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์ƒ๊ธด๋‹ค. ๋ฌผ๋ก  ํŒŒ์ดํ”„๋ผ์ธ์„ ์ด์šฉํ•ด์„œ ํ‘œ์ค€ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„๋“ค์ด๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ ๋ช…๋ น์–ด ์น˜ํ™˜์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋ช…๋ น์–ด ์น˜ํ™˜์€ $( ) ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๊ด„ํ˜ธ ์•ˆ์— ์‹คํ–‰ํ•˜๋ ค๋Š” ๋ช…๋ น์–ด๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ๋ณด์ž.

 

 

๋ช…๋ น์–ด ์น˜ํ™˜ ์‹œ ์œ„์—์„œ๋Š” ํฐ ๋”ฐ์˜ดํ‘œ๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค. ๋ช…๋ น์–ด ์น˜ํ™˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฑ์ฟผํŠธ(`)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์กด์žฌํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 2๊ฐœ์˜ ํ‘œํ˜„๋ฒ•์€ ๋ชจ๋‘ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด๋ฑ‰๋Š”๋‹ค. ๋‘ ๊ฐœ์˜ ๋ฐฉ๋ฒ• ์ค‘์—๋Š” ์ „์ž๋ฅผ ๋” ์„ ํ˜ธํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

 

echo Hello $(date '+%Y-%m-%d');
echo Hello `date '+%Y-%m-%d'`

 

๋‹ค์Œ์€ ์…ธ์˜ ์œ„์น˜ ํŒŒ๋ผ๋ฏธํ„ฐ์ด๋‹ค. ์…ธ ์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์œ„์น˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ผ๋Š” ์…ธ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ „๋‹ฌ๋ฐ›์€ ์ธ์ž๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค. ์œ„์น˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ฒซ ๋ฒˆ์งธ ์œ„์น˜๋Š” $1, ๋‘ ๋ฒˆ์งธ ์œ„์น˜๋Š” $2, ... ์‹์œผ๋กœ ์ˆซ์ž๋ฅผ ์ด๋ฆ„์œผ๋กœ ํ•˜๋Š” ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•œ ์ธ์ž๊ฐ€ ๊ฐ๊ฐ ํ• ๋‹น๋œ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ 3๊ฐœ์˜ ์ธ์ž๋ฅผ ๊ฒช๋Š” ๋ช…๋ น์–ด๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž.

 

๊ทธ๋ฆฌ๊ณ  params.sh ๋ผ๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ ๋‚ด์šฉ ์•ˆ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋‚ด์šฉ์ด ์žˆ๋‹ค.

 

params.sh ํŒŒ์ผ ๋‚ด์šฉ

 

๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด๋ณด๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ์•„๋ž˜์ฒ˜๋Ÿผ ๋‚˜์˜จ๋‹ค

 

 

์…ธ ๋ช…๋ น์–ด ์ธ์ž๋กœ ์ „๋‹ฌํ•ด์ค€ ๊ฒƒ์ด ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ๋ณผ์ˆ˜ ์žˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์ฃผ๋ชฉํ•  ์ ์€ 5๋ฒˆ์งธ ์ธ์ž์ธ $5๋„ ์ถœ๋ ฅํ•˜๋ผ๊ณ  ์…ธ ์Šคํฌ๋ฆฝํŠธ์— ๋ช…์‹œํ–ˆ์—ˆ๋Š”๋ฐ, ๋ช…๋ น์–ด๋กœ 4๋ฒˆ์งธ ์ธ์ž๊นŒ์ง€๋งŒ ์ „๋‹ฌํ•ด์ฃผ์—ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋Š” ์—๋Ÿฌ๋ฅผ ๋‚ด์ง€ ์•Š๊ณ  ์ถœ๋ ฅ๋˜๋ฉฐ ์ž…๋ ฅ๋˜์ง€ ์•Š์€ 5๋ฒˆ์งธ ์ธ์ž์— ๋Œ€ํ•ด์„œ๋Š” ๋นˆ ๊ฐ’์œผ๋กœ ์ถœ๋ ฅ์ด ๋œ๋‹ค.

 

๋‹ค์Œ์œผ๋กœ๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ง€์ •ํ•œ ์ธ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜ ์ข…๋ฅ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

 

๋ณ€์ˆ˜ ์˜๋ฏธ
$# ์…ธ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์‹œ ์ง€์ •ํ•œ ์ธ์ž ์ด ๊ฐœ์ˆ˜
$@ ์ธ์ž๋ฅผ ์ „์ฒด ์กฐํšŒํ•˜๋˜ ๊ฐ ์ธ์ง€๊ฐ€ ๊ฐ๊ฐ์˜ ๋ฌธ์ž์—ด๋กœ ์ „๊ฐœ๋จ
$* ์ธ์ž๋ฅผ ์ „์ฒด ์กฐํšŒํ•˜๋˜ ๊ฐ ์ธ์ž๊ฐ€ ํ•˜๋‚˜์˜ ์ „์ฒด ๋ฌธ์ž์—ด๋กœ ์ „๊ฐœ๋จ
$0 ์…ธ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด๋ฆ„
$1, $2, ... ์ปค๋งจ๋“œ ๋ผ์ธ ์ธ์ž์˜ ๊ฐ’(์œ„์น˜ ํŒŒ๋ผ๋ฏธํ„ฐ)

 

๋‹ค์Œ ๋ชฉ์ฐจ์—๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ถ„๊ธฐ, ๋ฐ˜๋ณต์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ œ์–ด ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ์ œ์–ด ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” if, for, while, case์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๋ฅผ ๋ณตํ•ฉ ๋ช…๋ น์–ด(Compound command)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

2-1. ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ถ„๊ธฐํ•˜์ž, if ๋ฌธ

if ๋ฌธ์€ ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ ํ‰๊ฐ€ํ•ด์„œ ์ฐธ์ธ์ง€ ๊ฑฐ์ง“์ธ์ง€์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ๋ฅผ ๋ถ„๊ธฐํ•˜๋Š” ์ œ์–ด ๊ตฌ์กฐ์ด๋‹ค. ์…ธ ์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๋“ค์—ฌ์“ฐ๊ธฐ๋กœ ํƒญ์ด๋‚˜ ๊ณต๋ฐฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋“ค์—ฌ์“ฐ์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•ด์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. if ๋ฌธ์„ ์ด์šฉํ•œ ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด์ž.

 

#!/bin/bash

arg="$1"

if [ "$arg" = "bin" ]; then
   echo "Hello world!"
fi

 

if ๋ฌธ์—์„œ ๋ฌธ๋ฒ•์ƒ์˜ ์ฃผ์˜์ ์ด ๋ช‡ ๊ฐ€์ง€ ์žˆ๋Š”๋ฐ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

  • ์กฐ๊ฑด์‹์— ์ด์–ด ์„ธ๋ฏธ์ฝœ๋ก (;)์„ ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค. ๋‹จ, then ํ‚ค์›Œ๋“œ๋ฅผ ๋‹ค์Œ ํ–‰์— ๊ธฐ์žฌํ•˜๋ฉด ์„ธ๋ฏธ์ฝœ๋ก ์„ ์ƒ๋žตํ•  ์ˆ˜ ๋Š” ์žˆ์Œ
  • [ ]์˜ ๊ฐ ๊ธฐํ˜ธ ์ „,ํ›„์— ๋ฐ˜๋“œ์‹œ ๊ณต๋ฐฑ์ด ์žˆ์–ด์•ผ ํ•จ

๊ทธ๋ฆฌ๊ณ  if ๋ฌธ ๋’ค์— ์˜ค๋Š” ๊ฒƒ์€ ์กฐ๊ฑด์‹์ด ์•„๋‹ˆ๋ผ ๋ช…๋ น์–ด์ด๋‹ค. ์œ„์ฒ˜๋Ÿผ if ๋’ค์— ์˜ค๋Š” [ ]์•ˆ์— ์žˆ๋Š” ๊ฒƒ์ด ์กฐ๊ฑด์‹์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๋ช…๋ น์–ด์ด๋‹ค. ์ฆ‰, [ ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฐ์‹œ์˜ ๋‚ด์žฅ ๋ช…๋ น์–ด์ด๋‹ค. ๋ฏฟ์ง€ ๋ชปํ•œ๋‹ค๋ฉด.. ์…ธ์—์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ณ๋ณด์ž.

 

 

๋”ฐ๋ผ์„œ [ ๋Š” ๋‹จ์ˆœํ•œ ๋Œ€๊ด„ํ˜ธ๊ฐ€ ์•„๋‹ˆ๋ผ ์ผ์ข…์˜ ๋ช…๋ น์–ด ์ด๋ฉฐ if ๋ฌธ ๋’ค์— ์žˆ๋Š” ๊ฒƒ์„ ์…ธ ๋ช…๋ น์–ด๋กœ ์ž…๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๊ฐ€ ๋œ๋‹ค.

 

๊ทธ๋ž˜์„œ if ๋ฌธ์€ ๋’ค์— ์˜ค๋Š” ์กฐ๊ฑด์‹์ด ์•„๋‹Œ ๋ช…๋ น์–ด์ด๊ณ , ์ด ๋ช…๋ น์–ด์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ถ„๊ธฐ๋ฅผ ํ•œ๋‹ค. ์ผ๋‹จ ์ด ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ๋ช…๋ น์–ด์˜ ์ข…๋ฃŒ ์ƒํƒœ์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•œ๋‹ค. ๋ช…๋ น์–ด์˜ ์ข…๋ฃŒ์ƒํƒœ๋ž€, ls ๋‚˜ grep ๊ฐ™์€ ๋ชจ๋“  ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์ข…๋ฃŒ๋˜์—ˆ์„ ๋•Œ ๋‚จ๋Š” ์ผ์ข…์˜ ์ •์ˆซ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ ์ด ์ •์ˆ˜๊ฐ’์€ $? ๋ผ๋Š” ์…ธ ๋ณ€์ˆ˜๋กœ ํ™•์ธํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ข…๋ฃŒ์ƒํƒœ๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ข…์‡ผ์ƒํƒœ๊ฐ’์€ ๊ฐ€์žฅ ์ง์ „์— ์ž…๋ ฅํ•œ ๋ช…๋ น์–ด์˜ ์ข…๋ฃŒ์ƒํƒœ ๊ฐ’์ด๋‹ค.

 

 

์œ„์—์„œ๋Š” ์ž…๋ ฅํ•œ ๋ช…๋ น์–ด๊ฐ€ ์ž˜ ๋™์ž‘ํ–ˆ๊ณ  ์ข…๋ฃŒ ์ƒํƒœ๊ฐ’์ด 0์œผ๋กœ ๋‚˜์™”๋‹ค. ์ฆ‰, ์ •์ƒ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด๋ฑ‰์—ˆ๋‹ค๋ฉด ์ข…๋ฃŒ์ƒํƒœ ๊ฐ’์€ 0์ด๊ณ , ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋น„์ •์ƒ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋ฉด 0 ์ด์™ธ์˜ ์ •์ˆ˜๊ฐ’์ด ๋ฐ˜ํ™˜๋œ๋‹ค. 0 ์ด์™ธ์˜ ์ •์ˆ˜ ๊ฐ’ ๊ฐ๊ฐ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” ๋งˆ์น˜ HTTP status ๊ฐ’ ์ข…๋ฅ˜๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”๊ฐ€ ๋‹ค๋ฅธ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐ๊ธฐ ์˜๋ฏธ๊ฐ€ ๋‹ค๋ฅด๋‹ค. ์ด์— ๋Œ€ํ•ด์„œ๋Š” ์ž…๋ ฅํ•œ ๋ช…๋ น์–ด์˜ ๋งค๋‰ด์–ผ์— ๋ณด๋ฉด ๋‚˜์˜จ๋‹ค.

 

์ด์ œ ์ข…๋ฃŒ์ƒํƒœ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋‹ค. [ ๋ช…๋ น์–ด๋Š” ์ธ์ž๋กœ ์ ˆ๋‹จ๋œ ์กฐ๊ฑด์‹ ์—ญํ• ์„ ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ํŒ์ •ํ•˜์—ฌ ์ฐธ์ด๋ฉด 0, ๊ทธ ์™ธ์—๋Š” 0์ด ์•„๋‹Œ ์ข…๋ฃŒ ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.  ๊ทธ๋ฆฌ๊ณ  if ๋ฌธ์€ ๋ฐ˜ํ™˜๋œ ์ข…๋ฃŒ์ƒํƒœ ๊ฐ’์„ ๋ณด๊ณ  0์ด๋ฉด ์ฐธ์œผ๋กœ ํŒ๋‹จํ•˜๊ณ , ๊ทธ ์ด์™ธ ์ˆซ์ž์ด๋ฉด ๊ฑฐ์ง“์œผ๋กœ ํŒ๋‹จํ•œ๋‹ค. ๊ฒฐ๊ตญ, ์กฐ๊ฑด์‹ ์—ญํ• ์„ ํ•˜๋Š” ๋ช…๋ น์–ด์˜ ์ข…๋ฃŒ์ƒํƒœ๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” $?๋ฅผ if ๋ฌธ์ด ๋Œ€์‹ ํ•˜์—ฌ ๋ด์ฃผ๊ณ  ์ฐธ, ๊ฑฐ์ง“์„ ํŒ๋‹จํ•ด์ฃผ๋Š” ์…ˆ์ด๋‹ค!

 

์ฐธ๊ณ ๋กœ, test ๋ช…๋ น์–ด๋ผ๋Š” ๊ฒƒ๋„ ์กด์žฌํ•˜๋Š”๋ฐ, [ ๋ช…๋ น์–ด์™€ ๋˜‘๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋ž˜์™€ ๊ฐ™์ด 2๊ฐœ์˜ ์ฝ”๋“œ๋Š” ๋˜‘๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค.

 

#!/bin/bash

arg="$1"

if [ "$arg" = "bin" ]; then
   echo "Hello world!"
fi
#!/bin/bash

arg="$1"

if test "$arg" = "bin" ; then
   echo "Hello world!"
fi

 

์ด์ œ [ ๋˜๋Š” test ๋ช…๋ น์–ด์— ํ• ๋‹นํ•˜๋Š” ์กฐ๊ฑด์‹ ๋ช…๋ น์–ด ์•ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์ž๋ฅผ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž. ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ์ง€๋งŒ ๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ์ž์—ด ๋น„๊ต, ์ •์ˆ˜ ๋น„๊ต, ํŒŒ์ผ ์†์„ฑ, ์—ฐ์‚ฐ์ž ๊ฒฐํ•ฉ๊ณผ ๊ด€๋ จ๋œ ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

 

์ข…๋ฅ˜ ์—ฐ์‚ฐ์ž ๋‚ด์šฉ  
๋ฌธ์ž์—ด ๋น„๊ต str1 = str2 str1 ๊ณผ str2 ๊ฐ€ ๊ฐ™์Œ  
str != str2 str1 ๊ณผ str2 ๊ฐ€ ๊ฐ™์ง€ ์•Š์Œ  
-n str1 str1์ด ๋นˆ ๋ฌธ์ž์—ด์ด ์•„๋‹˜  
-z str1 str1์ด ๋นˆ ๋ฌธ์ž์—ด์ž„ ๋ณ€์ˆ˜์— ๊ฐ’์ด ํ• ๋‹น๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์šฉ๋„๋กœ ์ž์ฃผ ์‚ฌ์šฉ
์ •์ˆ˜ ๋น„๊ต int1 -eq int2 (equal) int1 ๊ณผ int2 ๊ฐ€ ๊ฐ™์Œ ์ •์ˆ˜ ๋น„๊ต ์‹œ์—๋Š” ์ •์ˆ˜๋งŒ ๋‹ค๋ฃธ. ์†Œ์ˆ˜์  ์ž…๋ ฅํ•˜๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ
int1 -ne int2 (not equal) int1 ๊ณผ int2 ๊ฐ€ ๊ฐ™์ง€ ์•Š์Œ
int1 -lt int2 (less than) int1 < int2
int -le int2 (less equal) int1 <= int2
int -gt int2 (greater than) int1 > int2
int -ge int2 (greater equal) int1 >= int2
ํŒŒ์ผ ์†์„ฑ -e file file์ด ์กด์žฌํ•จ  
-d file file์ด ์กด์žฌํ•˜๊ณ  ๋””๋ ‰ํ„ฐ๋ฆฌ์ž„  
-h file file์ด ์กด์žฌํ•˜๊ณ  ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์ž„ -L file ์—ฐ์‚ฐ์ž์™€ ๋™์ผ
-f file file์ด ์กด์žฌํ•˜๋ฉฐ ์ผ๋ฐ˜ ํŒŒ์ผ์ž„ ์ผ๋ฐ˜ ํŒŒ์ผ์ด๋ž€, ๋””๋ ‰ํ† ๋ฆฌ๋„ ์•„๋‹ˆ๊ณ  ํŠน์ˆ˜ํŒŒ์ผ๋„ ์•„๋‹Œ ํŒŒ์ผ ์˜๋ฏธ
-r file file์ด ์กด์žฌํ•˜๋ฉฐ ์ฝ๊ธฐ ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋˜์–ด ์žˆ์Œ  
-w file file์ด ์กด์žฌํ•˜๋ฉฐ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋˜์–ด ์žˆ์Œ  
-x file file์ด ์กด์žฌํ•˜๋ฉฐ ์‹คํ–‰ ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋˜์–ด ์žˆ์Œ  
file1 -nt file2 file1 is newer than file2 file1 ๋ณ€๊ฒฝ ์‹œ๊ฐ„์ด ๋” ์ตœ์‹  ์‹œ๊ฐ„์ž„
file1 -ot file2 file1 is older than file2 file1 ๋ณ€๊ฒฝ ์‹œ๊ฐ„์ด ๋” ๊ณผ๊ฑฐ ์‹œ๊ฐ„์ž„
์—ฐ์‚ฐ์ž ๊ฒฐํ•ฉ ์กฐ๊ฑด์‹1 -a ์กฐ๊ฑด์‹2 ์กฐ๊ฑด์‹ ๋ชจ๋‘๊ฐ€ ์ฐธ์ด๋ฉด ์ฐธ(AND ์กฐ๊ฑด)  
์กฐ๊ฑด์‹1 -o ์กฐ๊ฑด์‹2 ์กฐ๊ฑด์‹ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ฐธ์ด๋ฉด ์ฐธ(OR ์กฐ๊ฑด)  
! ์กฐ๊ฑด์‹ ์กฐ๊ฑด์‹ ์ง„์œ„๊ฐ’์„ ๋ฐ˜๋Œ€๋กœ(NOT)  
( ) ์กฐ๊ฑด์‹์„ ๊ทธ๋ฃนํ™” -a, -o, ! ๋กœ ์—ฌ๋Ÿฌ ์กฐ๊ฑด์‹์„ ๊ฒฐํ•ฉํ•  ๋•Œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ.
๋„ฃ์–ด์ค„ ๋•Œ ๋ฐฐ์‹œ์˜ ๋ฉ”ํƒ€๋ฌธ์ž๋กœ ์—ฌ๊ฒจ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•ž์— ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž(\)๋ฅผ ๋ถ™์—ฌ์ฃผ์–ด์•ผ ํ•จ
์—ฌ๋Ÿฌ ๋ช…๋ น์–ด๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ํ‰๊ฐ€ํ•˜๋Š” ์—ฐ์‚ฐ์ž ๋ช…๋ น์–ด1 && ๋ช…๋ น์–ด2 ๋ช…๋ น์–ด1์ด ์ •์ƒ ์ข…๋ฃŒํ•˜์—ฌ ์ข…๋ฃŒ์ƒํƒœ๊ฐ€ 0์ด ๋ฐ˜ํ™˜๋œ ๊ฒฝ์šฐ์—๋งŒ ๋ช…๋ น์–ด2๊ฐ€ ์‹คํ–‰ ๊ทธ๋ž˜์„œ if ๋ฌธ์—์„œ &&๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข…๋ฃŒ ์ƒํƒœ๊ฐ€ ๋ชจ๋‘ 0(์ •์ƒ)์ด๋ผ๋Š” AND ์กฐ๊ฑด์„ ๊ธฐ์ˆ ํ•  ์ˆ˜ ์žˆ์Œ
๋ช…๋ น์–ด1 || ๋ช…๋ น์–ด2 ๋ช…๋ น์–ด1์ด ์ •์ƒ ์ข…๋ฃŒ๋˜์ง€ ์•Š์•„์•ผ ๋ช…๋ น์–ด2๊ฐ€ ์‹คํ–‰ if ๋ฌธ์—์„œ ||๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ๋ช…๋ น์–ด ์ค‘ ํ•˜๋‚˜์˜ ์ข…๋ฃŒ ์ƒํƒœ๊ฐ€ 0(์ •์ƒ)์ธ OR ์กฐ๊ฑด์„ ๊ธฐ์ˆ ํ•  ์ˆ˜ ์žˆ์Œ

 

๋งˆ์ง€๋ง‰์œผ๋กœ ์…ธ ์Šคํฌ๋ฆฝํŠธ์˜ ์ข…๋ฃŒ ์ƒํƒœ๊ฐ€ ์žˆ๋‹ค. ํŠน๋ณ„ํžˆ ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ์…ธ ์Šคํฌ๋ฆฝํŠธ์— ์ ํ˜€์žˆ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ช…๋ น์–ด ์ค‘ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์œผ๋กœ ์‹คํ–‰๋œ ๋ช…๋ น์–ด์˜ ์ข…๋ฃŒ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ๋งŒ์•ฝ ๋ช…์‹œ์ ์œผ๋กœ ์ข…๋ฃŒ ์ƒํƒœ๋ฅผ ์ง€์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด exit ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์•„๋ž˜ ์ฒ˜๋Ÿผ ์ง€์ •ํ•ด์ค€๋‹ค. ์ด๋ ‡๊ฒŒ ์ข…๋ฃŒ ์ƒํƒœ๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•˜๋ฉด ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ์ ์ ˆํžˆ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

exit <์ข…๋ฃŒ์ƒํƒœ ์ •์ˆ˜๊ฐ’>
#!/bin/bash

if [ -z "$1" ]; then
    exit 1
fi

ls "$1"

2-2. ํŠน์ • ํšŸ์ˆ˜๋งŒํผ ๋ฐ˜๋ณตํ•ด์„œ ์ฒ˜๋ฆฌํ•˜์ž, for ๋ฌธ

๋‹ค์Œ์€ for ๋ฌธ์ด๋‹ค. for ๋Š” ๊ณต๋ฐฑ์ด๋‚˜ ํƒญ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋‹จ์–ด ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•ด ๋ฐ˜๋ณต์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌ๋ฌธ์ด๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ for ๋ฌธ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

#!/bin/bash

for name in aaa bbb ccc
do
    echo $name
done

 

๋ฆฌ์ŠคํŠธ์— ๊ฒฝ๋กœ ํ™•์žฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, csv ํ˜•ํƒœ์˜ ํŒŒ์ผ๋งŒ ๋ฆฌ์ŠคํŠธ๋กœ ๊ฐ€์ ธ์™€์„œ ํŒŒ์ผ ์ด๋ฆ„์„ ์ถœ๋ ฅ์‹œํ‚ค๋ ค๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

 

#!/bin/bash

for name in *.csv
do
    echo $name
done

 

๋˜ํ•œ ๋ช…๋ น์–ด ์น˜ํ™˜์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆ˜์—ด์„ ์ƒ์„ฑํ•˜๋Š” seq ๋ช…๋ น์–ด๋กœ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ช…๋ น์–ด ์น˜ํ™˜์œผ๋กœ ์ทจ๋“ํ•œ ํ›„ for ๋ฌธ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ๊ฒฐ๊ณผ์ด๋‹ค.

 

#!/bin/bash

for num in $(seq 1 9)
do
   echo "$num"
done

 

๊ทธ๋ฆฌ๊ฑฐ for ๋ฌธ์—๋Š” ์ปค๋งจ๋“œ ๋ผ์ธ ์ธ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์œ„์—์„œ ๋ฐฐ์šด $@๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ž…๋ ฅํ•œ ์ปค๋งจ๋“œ ๋ผ์ธ ๋ชจ๋“  ์ธ์ž๋ฅผ ๊ฐœ๋ณ„์ ์ธ ๋ฌธ์ž๋กœ ๊ฐ„์ฃผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฐธ๊ณ ๋กœ ์ด ๋‘๊ฐœ๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งค์šฐ ๋งŽ์•„์„œ ์•„๋ž˜ ์Šคํฌ๋ฆฝํŠธ์—์„œ in ๊ณผ do ์‚ฌ์ด์˜ ๊ตฌ๋ฌธ์„ ๋นผ์„œ ์‹คํ–‰ํ•ด๋„ ๊ฒฐ๊ณผ๋Š” ๋˜‘๊ฐ™๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ ์ตœ๋Œ€ํ•œ ๋‹ค ์ž…๋ ฅํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

#!/bin/bash

for arg in "$@"
do
  echo "$arg"
done
./argu_for.sh a b c d e f g h

2-3. ์ง€์ •ํ•œ ๋ฌธ์ž์—ด ํŒจํ„ด์— ๋”ฐ๋ผ ๋ถ„๊ธฐํ•˜๊ธฐ, case ๋ฌธ

๋‹ค์Œ์€ ์ง€์ •ํ•œ ๋ฌธ์ž์—ด์˜ ํŒจํ„ด์— ๋”ฐ๋ผ ๋ถ„๊ธฐํ•  ์ˆ˜ ์žˆ๋Š” ์ œ์–ด ๊ตฌ์กฐ์ด๋‹ค. ์˜ˆ์ „์— Go ์–ธ์–ด๋ฅผ ์ž ๊น ๋ฐฐ์› ์„ ๋•Œ case ๋ถ„๊ธฐ๋ฌธ์„ ๋ณธ์ ์ด ์žˆ๋Š”๋ฐ, ์…ธ ์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ๋น„์Šทํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ์–ด์ฐŒ๋๊ฑด case ์‚ฌ์šฉ๋ฒ•์€ ํŒจํ„ด๊ณผ ์„ธ๋ฏธ์ฝœ๋ก  ์‚ฌ์ด์— ์‹คํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ์ฒ˜๋ฆฌ๋ฅด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ํฌ๋งท์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

case <๋ฌธ์ž์—ด> in
    <ํŒจํ„ด 1>)
        ์ฒ˜๋ฆฌ 1
        ;;
    <ํŒจํ„ด 2>)
        ์ฒ˜๋ฆฌ 2
        ;;
    ...
esac

 

์ฃผ์˜ํ•  ์ ์€ ๋ฐ˜๋“œ์‹œ ํŒจํ„ด์„ ๋ช…์‹œํ•˜๊ณ  ๋์—๋Š” ) ๋ฅผ ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด ๊ฐœ์ˆ˜์˜ ์ œํ•œ์€ ์—†๋‹ค. case ๋ฌธ์˜ ์˜ˆ์‹œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ์ฐธ๊ณ ๋กœ ํŒจํ„ด์— ์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž(*๋Š”์ž„์˜์˜ ๋ฌธ์ž์—ด, ?๋Š” ์ž„์˜์˜ ๋ฌธ์ž์—ด 1๊ฐœ)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋ณดํ†ต ์™€์ผ๋“œ์นด๋“œ *๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์–ด๋–ค ํŒจํ„ด์—๋„ ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋ฅผ ์ง€์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ | ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์ˆ ํ•œ ์—ฌ๋Ÿฌ๊ฐœ ํŒจํ„ด ์ค‘ ํ•œ ํŒจํ„ด์—๋งŒ ์ผ์น˜ํ•ด๋„(OR ์กฐ๊ฑด) ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

#!/bin/bash

for file in $(ls)
do
  case "$file" in
     *.sh)
       echo this is shell script. its name is "$file"
       ;;
     *.txt)
       echo this is text file. its nmae is "$file"
       ;;
   esac
done

2-4. ์ฐธ์ธ ์กฐ๊ฑด์— ๋Œ€ํ•ด์„œ๋Š” ๋ฌดํ•œ ๋ฐ˜๋ณต, while ๋ฌธ

๋‹ค์Œ์€ ํŠน์ • ์กฐ๊ฑด์ด ์ฐธ์ผ ๊ฒฝ์šฐ์—๋งŒ ๋ฌดํ•œ loop๋กœ ๋ฐ˜๋ณต์„ ํ•˜๋Š” while ๋ฌธ์ด๋‹ค. ์‚ฌ์šฉ ํฌ๋งท์€ for ๋ฌธ๊ณผ ๊ฑฐ์˜ ๋น„์Šทํ•˜๋‹ค.

 

while <๋ช…๋ น์–ด>
do 
   ๋ฐ˜๋ณต ์ฒ˜๋ฆฌ
done

 

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

 

echo $((100+200))

 

๋งŒ์•ฝ while ๋ฌธ์—์„œ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ˆ์‹œ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

#!/bin/bash

i=1
while [ "$i" -le 10 ]
do
  echo "$i"
  i=$((i+1))
done

2-5. ์…ธ์—์„œ ํ•จ์ˆ˜ ์ •์˜ํ•˜๊ธฐ

๊ธฐ์ดˆ์˜ ๋งˆ์ง€๋ง‰์œผ๋กœ ์…ธ ์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ์…ธ ์Šคํฌ๋ฆฝํŠธ๋„ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์ค‘๋ณต์œผ๋กœ ์ž…๋ ฅ๋˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๋กœ ๋ฌถ์–ด์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์…ธ ํ•จ์ˆ˜๋Š” function ์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์•„๋ž˜์™€ ๊ฐ™์€ ํฌ๋งท ํ˜•ํƒœ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ, function ๋˜๋Š” ( ) ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ƒ๋žตํ•ด์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

# ํ•จ์ˆ˜ ์ •์˜ํ•˜๋Š” 1๋ฒˆ ๋ฐฉ๋ฒ•
function <ํ•จ์ˆ˜ ์ด๋ฆ„> ()
{
  ์ฒ˜๋ฆฌ 
}

# ํ•จ์ˆ˜ ์ •์˜ํ•˜๋Š” 2๋ฒˆ ๋ฐฉ๋ฒ•
function <ํ•จ์ˆ˜ ์ด๋ฆ„>
{
  ์ฒ˜๋ฆฌ
}

# ํ•จ์ˆ˜ ์ •์˜ํ•˜๋Š” 3๋ฒˆ ๋ฐฉ๋ฒ•
<ํ•จ์ˆ˜ ์ด๋ฆ„> ()
{
  ์ฒ˜๋ฆฌ
}

 

๋ณดํ†ต 3๋ฒˆ ๋ฐฉ๋ฒ•์ด ๊ฐ€์žฅ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ์ •์˜ํ•œ ์…ธ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„์„ ๊ธฐ์ˆ ํ•˜๋ฉด ๋œ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด์ž.

 

#!/bin/bash

dir_list ()
{
 ls -al ./
}

 

๋‹ค์Œ์€ ์…ธ ํ•จ์ˆ˜ ์•ˆ์—์„œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์ด๋‹ค. ์…ธ ํ•จ์ˆ˜ ์•ˆ์—์„œ๋„ ์œ„์น˜ ํŒŒ๋ผ๋ฏธํ„ฐ์ธ $1, $2, ... ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ ์œ„์น˜ ํŒŒ๋ผ๋ฏธํ„ฐ์—๋Š” ์ปค๋งจ๋“œ ๋ผ์ธ ์ธ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜์˜ ์ธ์ž ๊ฐ’์ด ๋Œ€์ž…๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์™€ ๊ฐ™์€ ์…ธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

 

#!/bin/bash

echo This is CLI argument: "$1"
print_params ()
{
 echo "\$0 = $0"
 echo "\$1 = $1"
 echo "\$2 = $2"
 echo "\$3 = $3"
 echo "\$4 = $4"
}
echo This is Function arguments
print_params aa bb cc

 

๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ ํŠน์ดํ•˜๊ฒŒ, ๋ช…๋ น์–ด๋ฅผ ์˜๋ฏธํ•˜๋Š” $0๋ผ๋Š” ํŠน์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์…ธ์„ ์–ด๋–ป๊ฒŒ ์‹คํ–‰ํ•˜๋Š”์ง€์— ๋”ฐ๋ผ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค. ๋จผ์ € source ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด $0์—๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„์ด ๋‚˜์˜จ๋‹ค. ํ•˜์ง€๋งŒ ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด ์…ธ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ์ด๋ฆ„์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

 

๋‹ค์Œ์€ ์…ธ ํ•จ์ˆ˜์˜ ์ข…๋ฃŒ ์ƒํƒœ์ด๋‹ค. ์…ธ ํ•จ์ˆ˜ ์•ˆ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ๋งˆ์ง€๋ง‰์œผ๋กœ ์‹คํ–‰๋œ ๋ช…๋ น์–ด์˜ ์ข…๋ฃŒ ์ƒํƒœ๊ฐ€ ์…ธ ํ•จ์ˆ˜์˜ ์ข…๋ฃŒ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ๋งŒ์•ฝ ๋ช…์‹œ์ ์œผ๋กœ ์ข…๋ฃŒ ์ƒํƒœ์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ ค๋ฉด return ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. return ํ‚ค์›Œ๋“œ๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋˜๋ฉด ์…ธ ํ•จ์ˆ˜์˜ ์ฒ˜๋ฆฌ๊ฐ€ ์ข…๋ฃŒ๋˜๊ณ  ํ˜ธ์ถœํ•œ ๊ณณ์œผ๋กœ ์‹คํ–‰ ํ๋ฆ„์ด ๋Œ์•„๊ฐ„๋‹ค. ๋‹ค์Œ ์˜ˆ์‹œ๋ฅผ ๋ณด์ž.

 

#!/bin/bash

checkparams ()
{
 if [ -z "$1" ]; then
    return 1
 fi

 cat < "$1"
}
file=~/Desktop/work/linux/file.txt
checkparams $file

echo "$?"

 

์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์ข…๋ฃŒ์ƒํƒœ๋Š” ์–ด๋–จ๊นŒ? ๋ฐ”๋กœ 0์ด ๋‚˜์˜จ๋‹ค. ์™œ๋ƒํ•˜๋ฉด checkparams ๋ผ๋Š” ํ•จ์ˆ˜ ์ธ์ž์— ์ž…๋ ฅ์„ ํ•ด์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํ•จ์ˆ˜ ์ธ์ž์— ์•„๋ฌด๊ฒƒ๋„ ๋„ฃ์ง€ ์•Š์€ ์ฑ„๋กœ ์•„๋ž˜์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์„œ ์‹คํ–‰ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

 

#!/bin/bash

checkparams ()
{
 if [ -z "$1" ]; then
    return 1
 fi

 cat < "$1"
}

checkparams $file

echo "$?"

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ข…๋ฃŒ์ƒํƒœ๋Š” 1์ด ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด checkparams ์—์„œ return ํ‚ค์›Œ๋“œ๋ฅผ ๋งŒ๋‚ฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์œ„ ์ƒํƒœ์—์„œ ์ข…๋ฃŒ ์ƒํƒœ๊ฐ’์„ ๋‚ด ๋ง˜๋Œ€๋กœ 1์—์„œ 2๋กœ ๋ฐ”๊พผ ๋’ค ์ถœ๋ ฅํ•˜๋ฉด ์ข…๋ฃŒ ์ƒํƒœ๊ฐ’์ด 2๋กœ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•จ์ˆ˜์—์„œ๋„ return ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ข…๋ฃŒ์ƒํƒœ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ฒŒ ๋˜๋ฉด ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

#!/bin/bash

checkparams ()
{
 if [ -z "$1" ]; then
    return 2
 fi

 cat < "$1"
}

checkparams $file
echo "$?"

3. ์…ธ ์Šคํฌ๋ฆฝํŠธ ํ™œ์šฉํ•˜๊ธฐ

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

 

ํ•˜์ง€๋งŒ ์…ธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žฅ์ ๋งŒ์ด ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์…ธ ์Šคํฌ๋ฆฝํŠธ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์ผ ๋•Œ๋Š” ์ ์ ˆํ•˜์ง€ ๋ชปํ•˜๋‹ค. ์ฒซ ๋ฒˆ์งธ๋กœ, ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„  ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค. ์…ธ ์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๋ณ€์ˆ˜ ํƒ€์ž…์ด ์—†์œผ๋ฉฐ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๋ช…์ด ๊ฐ™์ด ๊ฐœ๋ฐœํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ๊ฐœ๋ฐœ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค. ๋˜ํ•œ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์œ„ํ•œ ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(IDE) ์ง€์›์ด ๋ถ€์กฑํ•˜๋‹ค.

 ๋‘ ๋ฒˆ์งธ๋กœ๋Š” ๊ณ ์„ฑ๋Šฅ์ด ํ•„์š”ํ•œ ์ฒ˜๋ฆฌ์—์„œ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค. ์…ธ ์Šคํฌ๋ฆฝํŠธ๋Š” ํ•œ ํ–‰์”ฉ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ์ฆ‰, ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฒ˜๋ฆฌ(fork)๊ฐ€ ๋™๋ฐ˜๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์— ๋น„ํ•ด ์‹คํ–‰ ์†๋„๊ฐ€ ๋Š๋ฆฐ ํŽธ์ด๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ์—ฐ์Šต๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋„๋ก ํ•˜์ž. ํ’€์–ด๋ณผ ๋ฌธ์ œ๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ธ์ž๋กœ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ง€์ •ํ•ด์ฃผ๋ฉด ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ๊ณผ ์„œ๋ธŒ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

3-1. Step01 : ์ž‘์€ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ์ฒœ์ฒœํžˆ

์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” ๊ฐ€์žฅ ์ž‘์€ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ๋งŒ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์šฐ์„  ์ธ์ž๋กœ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ง€์ •ํ•˜๋ฉด ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด๋ณด์ž.

 

#!/bin/bash

list_recursive() {
 local filepath=$1
 echo "$filepath"
}

list_recursive $1

 

ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•ด์„œ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ •์˜ํ–ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ•œ ๊ฐ€์ง€ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šฐ์ง€ ๋ชปํ•œ ๋ฌธ๋ฒ•์ด ๋‚˜์˜ค๋Š”๋ฐ, ๋ฐ”๋กœ local ์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค. local ์€ ๋ณ€์ˆ˜์˜ ์œ ํšจ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•˜๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค. ํŒŒ์ด์ฌ์—์„œ์˜ global, local ํ‚ค์›Œ๋“œ๋ฅผ ๋ฐฐ์šด ์ ์ด ์žˆ๋‹ค๋ฉด ์ต์ˆ™ํ•  ๊ฒƒ์ด๋‹ค. ์…ธ ์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ํ•œ ๋ฒˆ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋ฅผ ํ•จ์ˆ˜ ์•ˆํŒŽ์—์„œ ๋Œ€์ž…ํ•˜๊ฑฐ๋‚˜ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ•จ์ˆ˜ ๋‚ด๋ถ€ ๋˜๋Š” ์™ธ๋ถ€์—์„œ ์–ด๋–ค ๋ณ€์ˆ˜๊ฐ’์„ ๋ฐ”๊พผ๊ฒƒ์ด ์˜๋„์น˜ ์•Š๊ฒŒ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค.  ๋”ฐ๋ผ์„œ ์œ„์ฒ˜๋Ÿผ ํ•จ์ˆ˜ ๋‚ด์— local ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์œ ํšจํ–” ๋ณ€์ˆ˜๋กœ์จ ์ •์˜๋ฅผ ํ•ด์ค€๋‹ค.

3-2. Step02 : ํ•จ์ˆ˜๋ฅผ ์žฌ๊ท€ํ˜ธ์ถœํ•˜๊ธฐ

์ด์ œ ์ธ์ž๋กœ ๋„ฃ์–ด์ค€ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋นˆ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์•„๋‹Œ์ง€ ํ™•์ธํ•˜๊ณ , ๋นˆ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด์„œ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ํŒŒ์ผ๋“ค์„ ์ „๋ถ€ ์ถœ๋ ฅํ•ด๋ณด๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด๋ณด์ž.

 

#!/bin/bash

list_recursive() {
 local filepath=$1

 if [ -d "$filepath" ]; then
    local fname
    for fname in $(ls "$filepath")
     do
        echo "${filepath}/${fname}"
     done
 fi
}

list_recursive $1

 

๊ทธ๋Ÿฐ๋ฐ ์œ„ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋Š” ์„œ๋ธŒ ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ์žˆ๋Š” ํŒŒ์ผ๋“ค๊นŒ์ง€๋Š” ๋ณด์—ฌ์ฃผ์ง€ ๋ชปํ•œ๋‹ค. ์ด ๋•Œ ํ•„์š”ํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ ์ž๊ธฐ ์ž์‹  ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์žฌ๊ท€ ํ˜ธ์ถœ์ด๋‹ค. ์žฌ๊ท€ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ์•ˆ์— ์ž๊ธฐ ์ž์‹ ์˜ ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. ๋‹จ, ์ข…๋‹จ ์กฐ๊ฑด์ด ํ•„์š”ํ•œ๋ฐ ์—ฌ๊ธฐ์„œ๋Š” if ์กฐ๊ฑด๋ฌธ์ด ๊ทธ ์—ญํ• ์„ ํ•œ๋‹ค.

 

#!/bin/bash

list_recursive() {
 local filepath=$1
 echo "${filepath}"

 if [ -d "$filepath" ]; then
    local fname
    for fname in $(ls "$filepath")
     do
        list_recursive "${filepath}/${fname}"
     done
 fi
}

list_recursive $1

3-3. Step03 : ์ถœ๋ ฅ ํ™”๋ฉด ์ด์˜๊ฒŒ ๋งŒ๋“ค๊ธฐ

์œ„ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ชจ๋“  ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ„ฐ๋ฆฌ๋“ค์ด ๋‚˜์˜ค๊ธด ํ•˜๋Š”๋ฐ ์ค‘๋ณต๋˜๋Š” ์ ˆ๋Œ€๊ฒฝ๋กœ๊ฐ€ ๋งŽ๊ณ  ์„œ๋ธŒ ๋””๋ ‰ํ† ๋ฆฌ, ์„œ๋ธŒ ํŒŒ์ผ์„ ์˜๋ฏธํ•˜๋Š” ๋“ค์—ฌ์“ฐ๊ธฐ๋„ ์ž˜ ๋˜์ง€ ์•Š๊ณ  ์žˆ๋‹ค. ์ด 2๊ฐœ๋ฅผ ์ถ”๊ฐ€ํ•ด๋ณด์ž. ๋จผ์ € ์ค‘๋ณต๋˜๋Š” ์ ˆ๋Œ€๊ฒฝ๋กœ๋ฅผ ์—†์• ๋ณด์ž.

 

์ ˆ๋Œ€๊ฒฝ๋กœ์—์„œ ํŒŒ์ผ ์ด๋ฆ„๋งŒ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด bash์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์„œ ํŒจํ„ด์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

${๋ณ€์ˆ˜๋ช…##ํŒจํ„ด}

 

์œ„ ํŒจํ„ด์— ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ž์—ด ์ค‘ ๊ฐ€์žฅ ๊ธด ๋ฌธ์ž์—ด์ด ์ œ๊ฑฐ๋œ๋‹ค. ์ด์™€ ๊ด€๋ จํ•œ ๋‹ค๋ฅธ ํ‘œ๊ธฐ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

ํ‘œ๊ธฐ๋ฒ• ์˜๋ฏธ
${๋ณ€์ˆ˜๋ช…#ํŒจํ„ด} ์ „๋ฐฉ(์™ผ์ชฝ) ์ตœ๋‹จ ๋งค์น˜๋กœ ํŒจํ„ด์— ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„ ์ œ๊ฑฐ
${๋ณ€์ˆ˜๋ช…##ํŒจํ„ด} ์ „๋ฐฉ(์™ผ์ชฝ) ์ตœ์žฅ ๋งค์น˜๋กœ ํŒจํ„ด์— ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„ ์ œ๊ฑฐ 
${๋ณ€์ˆ˜๋ช…%ํŒจํ„ด} ํ›„๋ฐฉ(์˜ค๋ฅธ์ชฝ) ์ตœ๋‹จ ๋งค์น˜๋กœ ํŒจํ„ด์— ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„ ์ œ๊ฑฐ
${๋ณ€์ˆ˜๋ช…%%ํŒจํ„ด} ํ›„๋ฐฉ(์˜ค๋ฅธ์ชฝ) ์ตœ์žฅ ๋งค์น˜๋กœ ํŒจํ„ด์— ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„ ์ œ๊ฑฐ

 

๊ทธ๋ž˜์„œ */ ๋ผ๋Š” ํŒจํ„ด์ด ๋“ค์–ด๊ฐ€๋ฉด ๋ชจ๋“  ๋ฌธ์ž์—ด๊ณผ ์Šฌ๋ž˜์‰ฌ(/)๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋Š”  ํŒจํ„ด ์ค‘ ๊ฐ€์žฅ ๊ธด ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•˜๋ผ๋Š” ์˜๋ฏธ์ด๋ฉฐ ๊ฒฐ๊ตญ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ๋ถ€๋ถ„์„ ์‚ญ์ œํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 

#!/bin/bash

list_recursive() {
 local filepath=$1
 echo "${filepath##*/}"  # ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ญ์ œ!

 if [ -d "$filepath" ]; then
    local fname
    for fname in $(ls "$filepath")
     do
        list_recursive "${filepath}/${fname}"
     done
 fi
}

list_recursive $1

 

๋‹ค์Œ์€ ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•ด๋ณด์ž. ๋“ค์—ฌ์“ฐ๊ธฐ ํ•˜๋Š” ๋ถ€๋ถ„์„ echo ๋ช…๋ น์–ด ๋ถ€๋ถ„์— ์ถ”๊ฐ€ํ•ด์ฃผ๋˜ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์ค„ ๋•Œ ๋“ค์—ฌ์“ฐ๊ธฐ(indent) ์ธ์ž์— ์•ž์— ๊ณต๋ฐฑ์„ ๋‘์นธ ์ถ”๊ฐ€ํ•ด์„œ ํ˜ธ์ถœํ•ด์ฃผ๋„๋ก ํ•˜์ž.

 

#!/bin/bash

list_recursive() {
 local filepath=$1
 local indent=$2
 echo "${indent}${filepath##*/}"

 if [ -d "$filepath" ]; then
    local fname
    for fname in $(ls "$filepath")
     do
        list_recursive "${filepath}/${fname}" "   ใ„ด$indent"
     done
 fi
}

list_recursive $1 ""

3-4. Step04 : ์˜ˆ์™ธ ์ƒํ™ฉ ์ฒ˜๋ฆฌํ•˜๊ธฐ

์œ„ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋Š” ํŒŒ์ผ๋ช… ๋˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๋ช…์ด ๊ณต๋ฐฑ์ด ์žˆ์ง€ ์•Š์„ ๋•Œ ์ž˜ ์ถœ๋ ฅ์ด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๊ณต๋ฐฑ์ด ์žˆ๋Š” ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋ฆ„์ด ์žˆ์„ ๊ฒฝ์šฐ, ๊ณต๋ฐฑ์„ ๊ตฌ๋ถ„์œผ๋กœ bash๊ฐ€ ๋‹จ์–ด๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ƒํ•œ ์ถœ๋ ฅํ™”๋ฉด์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ bash๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋‹จ์–ด๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ธฐ์ค€์„ IFS(Internal Field Seperator, ๋‚ด๊ตฌ ํ•„๋“œ ๊ตฌ๋ถ„๋ฌธ์ž)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ด๊ฒƒ ๋˜ํ•œ  ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์ง€์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— IFS ๊ฐ’์„ ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์–ด bash๊ฐ€ ์„ค์ •ํ•ด์ค€ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋‹จ์–ด๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. for ๋ฌธ์ด๋‚˜ ์ปค๋งจ๋“œ๋ผ์ธ ์ธ์ž๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๋ชจ๋‘ IFS ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ฐ’์— ์„ค์ •๋œ ๋ฌธ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‹จ์–ด๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.

 

IFS์˜ ๊ธฐ๋ณธ์ ์ธ ๊ฐ’์€ ์ฐธ๊ณ ๋กœ ๊ณต๋ฐฑ, ํƒญ, ๊ฐœํ–‰์ด๋‹ค. ํ˜„์žฌ ์•„๋งˆ ๊ณต๋ฐฑ์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์„ ํ…Œ๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์ด IFS ๊ฐ’์„ ๊ฐœํ–‰์œผ๋กœ ์ˆ˜์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํ•œ ๊ฐ€์ง€ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์ด ์žˆ๋‹ค. IFS๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์‹คํ–‰ ์…ธ์—์„œ๋„ ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰, ๋งŒ์•ฝ ์–ด๋–ค ์…ธ์—์„œ IFS ๊ฐ’์„ ๊ฐœํ–‰์œผ๋กœ ๋ฐ”๊พธ์–ด์ฃผ๊ณ  ์›๋ณต์‹œ์ผœ๋†“์ง€ ์•Š์œผ๋ฉด ๋‹ค๋ฅธ ์…ธ์—์„œ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•  ๋•Œ IFS ๊ฐ’์„ ๊ฐœํ–‰์ธ ์ƒํƒœ๋กœ ์ฐธ์กฐํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ IFS ๊ฐ’์„ ๋ฏธ๋ฆฌ ๋ฐฑ์—…ํ•ด ๋†“๊ณ  IFS ๊ฐ’์„ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•œ ๋’ค ์›ํ•˜๋Š” ๋กœ์ง์„ ์‹คํ–‰ ํ›„, ๋‹ค์‹œ ๋ฐฑ์—…ํ•ด ๋…ผ ๊ฐ’์œผ๋กœ IFS ๊ฐ’์„ ์›๋ณต์‹œ์ผœ๋†“๋„๋ก ํ•˜์ž.

 

#!/bin/bash

_IFS=$IFS # ๋ฐฑ์—…

list_recursive() {

 local filepath=$1
 local indent=$2
 echo "${indent}${filepath##*/}"

 if [ -d "$filepath" ]; then
    local fname

    for fname in $(ls "$filepath")
     do
        list_recursive "${filepath}/${fname}" "   ใ„ด$indent"
     done
 fi
}

IFS=$'\n' # IFS ๊ฐ’ ๋ณ€๊ฒฝ
list_recursive $1 ""
IFS=$_IFS # IFS ๊ฐ’ ์›๋ณต

 

๋‹ค์Œ์€ xargs ๋ช…๋ น์–ด ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. xargs ๋ช…๋ น์–ด๋ฅผ ํ‘œ์ค€ ์ž…๋ ฅ์œผ๋กœ ์ธ์ž์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ›๋Š”๋‹ค. ์ฃผ๋กœ find, grep ๋ช…๋ น์–ด์™€ ๊ฐ™์ด ์‹คํ–‰๋˜๋Š”๋ฐ, ์•„๋ž˜์™€ ๊ฐ™์€ ํฌ๋งท์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

xargs <์‹คํ–‰ํ•˜๋ ค๋Š” ๋ช…๋ น์–ด>

 

์˜ˆ๋ฅผ ๋“ค์–ด, ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ์— txt ํ™•์žฅ์ž๋กœ ๋œ ํŒŒ์ผ๋“ค์— ๋Œ€ํ•ด ๋‚ด์šฉ์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž. ๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

find . -name "*.txt" | xargs cat

 

๋งˆ์ง€๋ง‰์œผ๋กœ ๋„์›€๋ง ํ‘œ์‹œ์— ๊ด€ํ•œ ๋ช…๋ น์–ด์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฆฌ๋ˆ…์Šค ๋ช…๋ น์–ด์— --help ๋ผ๋Š” ์˜ต์…˜์„ ์ง€์ •ํ•˜๋ฉด ๋„์›€๋ง์ด ์ถœ๋ ฅ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๋„์›€๋ง๋„ ์ง์ ‘ ์ œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํžˆ์–ด ๋„ํ๋จผํŠธ๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์—ฌ๋Ÿฌ ํ–‰์˜ ํ…์ŠคํŠธ๋ฅผ ์…ธ ์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ทธ๋Œ€๋กœ ๊ธฐ์ˆ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๋ช…๋ น์–ด << ์ข…๋ฃŒ ๋ฌธ์ž์—ด
 <ํžˆ์–ด ๋„ํ๋จผํŠธ ๋‚ด์šฉ>
 ...
์ข…๋ฃŒ ๋ฌธ์ž์—ด

 

์ฐธ๊ณ ๋กœ ํžˆ์–ด ๋„ํ๋จผํŠธ ์•ˆ์—์„œ๋„ ์…ธ ๋ณ€์ˆ˜์˜ ํ™•์žฅ($์…ธ๋ณ€์ˆ˜ ์ฒ˜๋Ÿผ ์ •์˜ ๊ฐ€๋Šฅ)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ˜น์—ฌ๋ผ๋„ ๋ณ€์ˆ˜ ํ™•์žฅ์„ ์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ข…๋ฃŒ ๋ฌธ์ž์—ด์„ ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์ฃผ๋ฉด ๋œ๋‹ค.

 

๋ช…๋ น์–ด << '์ข…๋ฃŒ ๋ฌธ์ž์—ด'
 <ํžˆ์–ด ๋„ํ๋จผํŠธ ๋‚ด์šฉ>
 ...
์ข…๋ฃŒ ๋ฌธ์ž์—ด

 

๋ช…๋ น์–ด ์˜๋ฏธ
basename <ํŒŒ์ผ ๊ฒฝ๋กœ> ์ง€์ •ํ•œ <ํŒŒ์ผ ๊ฒฝ๋กœ>์—์„œ ๊ฐ€์žฅ ํ•˜์œ„์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋˜๋Š” ํŒŒ์ผ ์ด๋ฆ„๋งŒ์„ ์ถ”์ถœ
๋ฐ˜์‘ํ˜•