๋ ํฐ๋ฏธ๋์์ ์์
ํ๋ ๊ฒ์ ๊ต์ฅํ ์ข์ํ๋ค. ์๋ฌด๋๋ ๋ง์ฐ์ค๊ฐ ๋ฑํ ํ์ ์๊ณ ๊ฐ๋ฐ์ ํฅ๊ธฐ๊ฐ ๋๊ธฐ ๋๋ฌธ์ด ์๋๊น? ๊ทธ๋์ ๋จ์ํ ํฐ๋ฏธ๋ ์์
์ฉ์ผ๋ก ๋งฅ๋ถ์ ์๊ณ ๋๊ตฌ๋ vi
๋ก ๊ฐ๋ฐ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๊ตฌ ๊ด๋ จ๋ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๋ค ๋ณด๋ฉด Linux
ํ๊ฒฝ์์๋ง ์๋ํ๊ธฐ ๋๋ฌธ์ ์์ ์ด๋ ์ฝ๋ ์ดํด๋ฅผ ์ํด ์ด๋์ ๋ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์์์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ Commnad Line์์ ๋ด๊ฐ ์ํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ธฐ ์ํด์ shell ์คํฌ๋ฆฝํธ๋ณด๋ค ์ข์๊ฒ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค.
Basic Shell Script
date
: ํ์ฌ ๋ ์ง ๋ฐ ์๊ฐ์ ์ถ๋ ฅ
1
2
| date
2022๋
3์ 31์ผ ๋ชฉ์์ผ 17์ 42๋ถ 47์ด JST
|
cal
: ํ์ฌ ๋ ์ง์ ์บ๋ฆฐ๋๋ฅผ ์ถ๋ ฅ (์ฌ์ค ์ธ์ผ ์์)
1
2
3
4
5
6
7
8
| cal
3์ 2022
์ผ ์ ํ ์ ๋ชฉ ๊ธ ํ
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
|
pwd
: current working directory๋ก ํ์ฌ ์์
์ค์ธ ๊ฒฝ๋ก๋ฅผ ์ถ๋ ฅ
1
2
| pwd
/Users/choiwonjun/Desktop
|
ls
: ํ์ฌ ๊ฒฝ๋ก์ ๋ชจ๋ ํ์ผ๊ณผ ๋๋ ํ ๋ฆฌ๋ฅผ ์ถ๋ ฅ (์ ์ผ ๋ง์ด ์ฐ์)
์์ ๋ช
๋ น์ด๋ฅผ ๊ทธ๋๋ก ํฐ๋ฏธ๋ ์ฐฝ์ ์ณ๋ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋์ง๋ง ์์ผ๋ก ๋ ๋ง์ ๋ช
๋ น์ด์ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๊ธฐ ์ํด์๋ shell script
๋ก ๋ง๋ค์ด ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
vi
๋ก ์๋ก์ด shell
ํ์ผ ์์ฑ
vi
์์ i
ํค๋ฅผ ๋๋ฌ insert
๋ชจ๋๋ก ๋ณ๊ฒฝํ๊ณ ์ฝ๋ ์์ฑ
๐ task.sh
:wq
๋ช
๋ น์ด๋ฅผ ํตํด ์ ์ฅ ํ vi
์ข
๋ฃchmod
๋ช
๋ น์ด๋ก ๊ถํ์ ๋ณ๊ฒฝ
- ํ์ผ์ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์คํ๋จ
1
2
3
4
5
6
7
8
9
10
11
12
| ./task.sh
2022๋
3์ 31์ผ ๋ชฉ์์ผ 18์ 00๋ถ 38์ด JST
3์ 2022
์ผ ์ ํ ์ ๋ชฉ ๊ธ ํ
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
/Users/choiwonjun/Desktop
git util
|
๋ค์๊ณผ ๊ฐ์ด ๊ธฐ๋ณธ ๋ช
๋ น์ด๋ก ๊ฐ๋จํ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํด ๋ณด์๋ค. ์ฌ์ค ๋ช
๋ น์ด๋ ์์ฒญ ๋ง๊ณ ํ๊ฒฝ๋ณ์๋ ๋ง๋ค. ์ด ๋ถ๋ถ์ ์ฐจ์ฐจ ์์๊ฐ๋๋ก ํด๋ณด์
Shell Macro
๋ช
๋ น์ด์ ๋ํ parameter
๊ต์ฅํ ๋ง์ง๋ง ๊ตณ์ด ์ง๊ธ ์ฌ์ฉํ๋ ๋ช
๋ น์ด๊ฐ ์๋๋ฉด ์๋ตํ๋๋ก ํ๊ฒ ๋ค.
man
: ๋ช
๋ น์ด ๋ค์์ ์์ฑํ๋ ๋ช
๋ น์ด์ ๋ฉ๋ด์ผ์ ํ์ธ
which
: ํ์ผ์ด ์์นํ ๊ฒฝ๋ก๋ฅผ ์ถ๋ ฅ
1
2
| which g++
/usr/bin/g++
|
echo
: ์ธ์๋ก ๋ค์ด์จ ๊ฐ์ standard output
์ผ๋ก ์ถ๋ ฅ
cp
: ํ์ผ์ ํด๋น ๊ฒฝ๋ก๋ก ๋ณต์ฌ
1
| cp ./task.sh ../task.sh
|
mv
: ํ์ผ์ ํด๋น ๊ฒฝ๋ก๋ก ์ด๋ (์ด๋ฆ ๋ณ๊ฒฝํ ๋๋ ์ฌ์ฉ)
์์ฝ ๋ณ์(Reserved Variable)
๋ค์ ๋ณ์๋ค์ shell์ ๋ด์ฅ๋ ๋ณ์๋ค๋ก ๋ณ์ ์ด๋ฆ ์์ $
๋ฅผ ๋ถ์ฌ์ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ฌ๋ฌ ์์ฝ ๋ณ์๊ฐ ์์ง๋ง ์์ฃผ ์ฌ์ฉํ๊ณ ์ค์ํ ๊ฒ๋ค๋ง ๋์ดํด ๋ณด๊ฒ ๋ค.
HOME
: ์ฌ์ฉ์์ ํ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋กPATH
: ์คํ ํ์ผ์ ์ฐพ์ ๊ฒฝ๋กLANG
: ํ๋ก๊ทธ๋จ ์ฌ์ฉ์ ๊ธฐ๋ณธ ์ง์๋๋ ์ธ์ดPWD
: ์ฌ์ฉ์์ ํ์ฌ ์์
์ค์ธ ๋๋ ํ ๋ฆฌFUNCNAME
: ํ์ฌ ํจ์ ์ด๋ฆSECONDS
: ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋ ์ด ๋จ์ ์๊ฐSHLVL
: ์ ๋ ๋ฒจ(์ค์ฒฉ๋ ๊น์ด๋ฅผ ๋ํ๋)SHELL
: ๋ก๊ทธ์ธํด์ ์ฌ์ฉ์ค์ธ ์ ์ข
๋ฅPPID
: ๋ถ๋ชจ ํ๋ก์ธ์ค์ PIDBASH
, ZSH
: SH ์คํ ํ์ผ ๊ฒฝ๋กBASH_VERSION
, ‘ZSH_VERSION` : ์ค์น๋ BASH/ZSH ๋ฒ์ LOGNAME
: ๋ก๊ทธ์ธ ์ฌ์ฉ์ ์ด๋ฆUID
: ์ฌ์ฉ์ UIDUSER
, USERNAME
: ์ฌ์ฉ์์ ์ด๋ฆHISTFILE
: history ํ์ผ ๊ฒฝ๋กHISTSIZE
: history ์ ์ฅ ๋๋ ๊ฐ์
Redirection
์ด๋ค ํ์ผ์์ ๋์จ ๊ฒฐ๊ณผ๋ ํด๋น ํ์ผ์ ์ด์ฉํด์ ๋ค๋ฅธ ํ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค. ๊ต์ฅํ ์ ์ฌ์ฉํ๋ฉด ์์
์ ์๋ํ ํ ์ ์์ผ๋ฉฐ, ๊ต์ฅํ ์ ๊ธฐํ๊ณ ํธํ ๊ธฐ๋ฅ์ด๋ค.
stdin
, stdout
, stderr
3๊ฐ์ง์ ์คํธ๋ฆผ์ผ๋ก ๋๋จ>
: output redirection- ๋ค์๊ณผ ๊ฐ์ด ์
๋ ฅํ๋ฉด
$PATH
์ ๋ณด๊ฐ output.txt
์ ๊ธฐ๋ก - ๊ธฐ์กด์
output.txt
ํ์ผ์ด ์กด์ฌํ๋ค๋ฉด ์ง์ฐ๊ณ ์๋ก ์์ฑ
1
| echo $PATH > output.txt
|
$ command 2> file
๋ก ์์ฑํ๋ฉด stderr
๋ฅผ file์ ๊ธฐ๋ก>>
: append redirection- ๊ธฐ์กด output ํ์ผ์ ์ด์ด์ ์ถ๋ ฅ
1
| echo $HOME > output.txt
|
|
: Pipe- ํ ํ๋ก์ธ์ค์
stdout
์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ stdin
์ผ๋ก ์ฐ๊ฒฐ - command1์์ ๋์จ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ก command2๋ก ์
๋ ฅ
<
, >
: ํ์ผ ์
๋ ฅ ๋ฐ ์ถ๋ ฅ- ํ์ผ์ ์
๋ ฅํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ํ์ผ๋ก ์ถ๋ ฅํ๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ฉด ๋๋ค.
1
| command < input.txt > output.txt
|
๐ฆ ๋ง๋ฌด๋ฆฌ ๐ฆ
๊ฐ๋จํ Shell Script ํ๋ก๊ทธ๋จ์ ๋ง๋ค๋ ค๊ณ ์์ํ ๊ธ์ธ๋ฐ ์์ธํ ํ๋ณด๋๊น ์ ๋ณด๊ฐ ๋๋ฌด ๋ง๋ค๐ฅ
๊ทธ๋๋ ๊ธฐ๋ณธ์ ์ธ Shell ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด์ ์์ ์ต์๋ก ์์์ผ ํ๋ ์ง์๋ง ์ ๋ฆฌํด๋ณด์๋ค. ์ฌ์ค ๋ณธ ๊ธ์์ ์ ๋ฆฌํ ๋ด์ฉ์ผ๋ก๋ ๋ฑ๋
๋ฑ๋
๋ง๋ค๋ฉด ๊ทธ๋๋ ๊ทธ๋ด์ธํ ํ๋ก๊ทธ๋จ์ด ๋์จ๋ค. ๋ค์ ํฌ์คํ
์๋ Shell Script๋ก CLI ๊ธฐ๋ฐ์ ์ฝ๋ ์ฑ์ ํ๋ก๊ทธ๋จ์ ์ ์ํด ๋ณด๊ฒ ๋ค.