Shell Script(๋ณ€์ˆ˜, for, if, date, array, function, IFS, awk) & Cron

woomยท2023๋…„ 7์›” 26์ผ
0

Linux

๋ชฉ๋ก ๋ณด๊ธฐ
14/14
post-thumbnail

์ถœ์ฒ˜ : ์‹œ์ฝ” - ๋ฆฌ๋ˆ…์Šค ์‹ค๋ฌด ์ž…๋ฌธ


๐ŸŒผ Shell Script

shell์— script(ํ•œ์ค„์”ฉ ์‹คํ–‰)์งœ๋Š” ๊ฒƒ์œผ๋กœ ์ฒซ์ค„์— #!/bin/bash ํ•„์ˆ˜!!

  • ๋ช…๋ น์ด ์•„๋‹Œ์ด์ƒ ๋‹ค string์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— "๋กœ ๊ฐ์‹ธ์ง€ ์•Š์•„๋„ ๋จ
  • {} ์‚ฌ์ด์— ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ํ”„๋กœ๊ทธ๋žจ(๋ช…๋ น ex. {print a})

๐Ÿ“Œ vim์˜ ํ™˜๊ฒฝ์„ค์ •

  • vimrc: vim ์˜ ํ™˜๊ฒฝ์„ค์ •
    • vi .vimrc ์„ค๋ช… : indent๋ฅผ ์•Œ์•„์„œ ์„ค์ •, tabํฌ๊ธฐ๋ฅผ 4๋กœ ์„ค์ •
set smartindent 
set tabstop=4  
set expandtab
set shiftwidth=4

๐Ÿ“• ๋ณ€์ˆ˜์‚ฌ์šฉ

  • ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• str="hello " ์ด๋ฉด $๋ฅผ ์ด์šฉํ•ด์„œ ์‚ฌ์šฉ
    • echo "${str}world" : ๋ถ™์—ฌ์“ฐ๊ณ ์‹ถ์œผ๋ฉด ์ค‘๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ
    • echo "$str world" : hello world ์ถœ๋ ฅ๋จ
  • vi s1.sh

  • ๋ณ€์ˆ˜ ๊ทœ์น™

    • $n: n๋ฒˆ์งธ ๋ช…๋ น
    • $#: ๋‚˜๋นผ๊ณ  ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐœ์ˆ˜
  • vi s3.sh


๐Ÿ“™ ๋ฐ˜๋ณต๋ฌธ

  • for๋ฌธ ์˜ˆ์‹œ

    • for i in `ls`; do echo $i; done
      1. ๋ฐฑํ‹ฑ์•ˆ์— ์žˆ๋Š” ๋ช…๋ น ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๊ฐ’ ๋“ค์–ด๊ฐ
      1. doํ•ด๋ผ done๋๋‚ด๋ผ (set์ž„)
    • for i in 1 3 5; do echo $i; done
    • ๊ฒฐ๊ณผ 1 /n 3 /n 5 (๊ฐœํ–‰๋จ)
    • range๋Š” ์ค‘๊ด„ํ˜ธ์•ˆ์— for i in {1..10}; do echo $i; done
    • ๊ฒฐ๊ณผ : 1๋ถ€ํ„ฐ 10๊นŒ์ง€ ์ถœ๋ ฅ๋จ
    • for i in `ls *.txt`; do echo $i; cat $i; done
    • .txt๋กœ ๋๋‚˜๋Š” ํŒŒ์ผ๋ช…๊ณผ ํŒŒ์ผ๋‚ด์šฉ์„ ์ถœ๋ ฅ
  • vi s2.sh


๐Ÿ“Œ ๋ณ„์นญ

  • alias s2='~/s2.sh'
  • ๊ณ„์† ์ €์žฅํ•˜๊ณ  ์‹ถ์œผ๋ฉด vi .bashrc์—์„œ ์ €์žฅํ•ด์ค˜์•ผํ•ด (๋กœ๊ทธ์ธํ•˜๋ฉด ์ž๋™ ์‹คํ–‰๋˜๋Š” ํŒŒ์ผ)
    • .bashrc : Bash์‰˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ดˆ๊ธฐํ™” ํŒŒ์ผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ• ๋•Œ๋งˆ๋‹ค bash์‰˜์ด ์‹คํ–‰๋  ๋•Œ ์ž๋™์œผ๋กœ ๋กœ๋“œ๋จ
    • . .bashrc : ํ˜„์žฌ ์„ธ์…˜์—์„œ .bashrcํŒŒ์ผ์„ ์‹คํ–‰ํ•ด๋ผ(์ถ”๊ฐ€ํ•œ ์„ค์ •๋“ค ์ฆ‰์‹œ ์ ์šฉ)

๐Ÿ“’ ์กฐ๊ฑด๋ฌธ

  • ์ˆซ์ž ๋น„๊ต
    • -gt(greater than) : ํฌ๋‹ค >
    • -lt(less than) : ์ž‘๋‹ค <
    • -eq(equal) : ๊ฐ™๋‹ค =
    • -ne(not equal) : ๊ฐ™์ง€์•Š๋‹ค !=
    • -le(less equal) : ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค <=
    • -qe(greater equal) : ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค >=
  • ๋ฌธ์ž ๋น„๊ต
    • ==, !=
  • ํŒŒ์ผ ๋น„๊ต
    • -f : ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š๋ƒ
    • -r : ์ฝ๊ธฐ ๊ถŒํ•œ ์žˆ๋Š๋ƒ
    • -w : ์“ฐ๊ธฐ ๊ถŒํ•œ ์žˆ๋Š๋ƒ
    • -x : ์‹คํ–‰ ๊ถŒํ•œ ์žˆ๋Š๋ƒ
  • vi s4.sh
    • ์ธ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ 0์ผ๊ฒฝ์šฐ ์‚ฌ์šฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ
    • exit 0 : ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋จ์„ ๋‚˜ํƒ€๋ƒ„

๐Ÿ“Œ date

  • ๊ธฐ๋ณธ : DATE=date +%Y-%m-%d

  • DATE์˜ ๋‹ค์–‘ํ•œ ํ‘œํ˜„

    • DATE=date +%Y-%m-%d --date=yesterday/tomorrow : ์–ด์ œ/๋‚ด์ผ
    • DATE=date +%Y-%m-%d --date='n day ago' : n์ผ ์ „
    • DATE=date +%Y-%m-%d --date='n day' : n์ผ ํ›„
    • DATE=date +%Y-%m-%d --date='n week ago' : n์ฃผ ์ „
    • DATE=date +%Y-%m-%d --date='n month ago' : n๋‹ฌ ์ „
    • DATE=date +%Y-%m-%d --date='n month' : n๋‹ฌ ํ›„

๐ŸŽ€ ์—ฐ์Šต๋ฌธ์ œ

  • ํŒŒ์ผ๋ช…์„ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด ์˜ค๋Š˜๋‚ ์งœ(์—ฐ์›”์ผ).txt๋กœ ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ
    • a.txt์˜ ํŒŒ์ผ๋ช…์„ ์˜ค๋Š˜๋‚ ์งœ.txt๋กœ ๋ณ€๊ฒฝ
  • ํŒŒ์ผ๋ช…์„ 2๊ฐœ ์ž…๋ ฅ ๋ฐ›์•„ ๋‘ ํŒŒ์ผ์„ ํ•ฉ์นœ ํ›„, ํŒŒ์ผ๋ช…์„ ์–ด์ œ๋‚ ์งœ.log๋ผ๊ณ  ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“œ์‹œ์˜ค.
    • s1.sh์˜ ๋‚ด์šฉ๊ณผ s3.sh์˜ ๋‚ด์šฉ์„ ํ•ฉ์ณ์„œ ์–ด์ œ๋‚ ์งœ.log์ธ ํŒŒ์ผ ์ƒ์„ฑ
    • >> : appendํ•ด์„œ FN์˜ ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ด๋ผ
  • ๊ตฌ๊ตฌ๋‹จ ์ถœ๋ ฅ
    • $(( ์—ฐ์‚ฐ )) : ์—ฐ์‚ฐ์„ ํ•ด๋ผ

๐Ÿ’ก ์ฐธ๊ณ  expr : ์—ฐ์‚ฐํ•˜๋ผ๋Š” ๋ช…๋ น์–ด

  • ๋„์–ด์“ฐ๊ธฐ ์ค‘์š”

๐Ÿ“— Array

  • Array ์„ ์–ธ

    • declare -a arr : arr๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ array๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ํ™•๋ณดํ•˜๊ฒ ๋‹ค.
    • arr=("aaa" "bbb" "ccc" 123) : ๊ด„ํ˜ธ์•ˆ์— ์žˆ์œผ๋ฉด array๋กœ ํŒ๋‹จ
  • Array ์ถœ๋ ฅ

    • ${arr[n]} : array์˜ n๋ฒˆ์งธ ์š”์†Œ (๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์ค‘๊ด„ํ˜ธ์— ์•ˆ๋ฌถ์–ด์ฃผ๋ฉด ๋Œ€๊ด„ํ˜ธ๋ฅผ ๋ฌธ์ž๋กœ ์ธ์‹ํ•จ)
    • arr๋กœ๋งŒ ์ถœ๋ ฅํ•˜๋ฉด ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋งŒ ์ถœ๋ ฅ๋จ
    • @ : all์˜ ์˜๋ฏธ
    • #array : ๋ฐฐ์—ด์˜ ๊ธธ์ด

๐Ÿ“˜ Function

  • ํ•จ์ˆ˜๋Š” ์œ„์— ์žˆ๋Š” ํ•จ์ˆ˜๋งŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
    • $0, $@, $1, $# : ์ž๊ธฐ์ž์‹ , ๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋ถ€, ์ฒซ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐœ์ˆ˜

๐Ÿ“š IFS & AWK

  • IFS(Internal Field Separator) : ์‰˜์—์„œ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ๋ถ„์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜
    • ๊ธฐ๋ณธ์ ์œผ๋กœ IFS๋Š” ๊ณต๋ฐฑ, ํƒญ, ์ค„ ๋ฐ”๊ฟˆ ๋ฌธ์ž๋กœ ์„ค์ •๋˜์–ด ์žˆ์Œ
    • echo "IFS=${IFS}.": IFS์˜ ํ˜„์žฌ ๊ฐ’์„ ์ถœ๋ ฅ
    • PRE_IFS=$IFS: ํ˜„์žฌ IFS์˜ ๊ฐ’์„ PRE_IFS๋ผ๋Š” ๋ณ€์ˆ˜์— ์ €์žฅ
    • IFS=": IFS ๊ฐ’์„ ์ค„๋ฐ”๊ฟˆ ๋ฌธ์ž(\n)๋กœ ๋ณ€๊ฒฝ
    • awk '{print $5}' : 5๋ฒˆ์งธ ํ•„๋“œ๋ฅผ ์ถœ๋ ฅํ•ด๋ผ
    • IFS=$PRE_IFS : ๋ฐ˜๋ณต์ด ๋๋‚œ ํ›„, IFS์˜ ๊ฐ’์„ ์ด์ „์— ์ €์žฅํ•ด๋‘” PRE_IFS์˜ ๊ฐ’์œผ๋กœ ๋ณต๊ตฌ(IFS๊ฐ’์„ ์›๋ž˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆผ)

๐ŸŽ€ ์—ฐ์Šต๋ฌธ์ œ

  • ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์— ์กด์žฌํ•˜๋Š” ํŒŒ์ผ๋“ค์˜ ์ด๋ฆ„๊ณผ ํฌ๊ธฐ๋ฅผ ํ•œ๊ฐœ์˜ ํŒŒ์ผ๋กœ ์ƒ์„ฑํ•˜์‹œ์˜ค(total, ., ..๋“ฑ์€ ์ œ์™ธ)
    • ๋ณ€์ˆ˜๋Š” ๋ชจ๋‘ string์ด๋ฏ€๋กœ ๊ณ„์‚ฐ ๋ถˆ๊ฐ€
    • expr์€ ๋ฐ–์—์„œ ๊ณ„์‚ฐํ•œ ํ›„์— ๊ฒฐ๊ณผ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๊ณ„์‚ฐ ๊ฐ€๋Šฅ

๐ŸŒผ Cron

  • ๋ฆฌ๋ˆ…์Šค์—์„œ scheduler (์ฃผ๊ธฐ๋งˆ๋‹ค ์‹คํ–‰ํ•ด๋ผ)
    • sudo apt-get update : ์„ค์น˜์ „์— ์—…๋ฐ์ดํŠธ!!
    • sudo apt-get install cron : cron์„ค์น˜
    • service cron restart : ํฌ๋ก  ์„œ๋น„์Šค ์‹คํ–‰
    • cron ์‹คํ–‰ ํ™•์ธ
    • crontab -e : cron์ฃผ๊ธฐ ์„ค์ •ํ•˜๋Š” ์‰˜(root์—์„œ ๊ฐ€๋Šฅ)
    • crontab -l : crontab์— ์„ค์ •ํ•œ ๊ฒƒ ํ™•์ธ ๊ฐ€๋Šฅ

๐Ÿฃ ๋ถ„ ์‹œ ์ผ ์›” ์ฃผ (์•”๊ธฐํ•„์ˆ˜)

  • 0 13 5 12 * : ๋งค๋…„ 12์›” 5์ผ ์˜คํ›„1์‹œ์— ์‹คํ–‰๋จ

  • * * * * * : 1๋ถ„๋งˆ๋‹ค ์‹คํ–‰


๐Ÿ“Œ 2>&1

  • ํ‘œ์ค€์—๋Ÿฌ๋ฅผ ํ‘œ์ค€์ถœ๋ ฅ์—๊ฒŒ ์ฃผ๊ฒ ๋‹ค
    • 2: ํ‘œ์ค€์—๋Ÿฌ(์—๋Ÿฌ๋ฉ”์‹œ์ง€๋Š” ํ‘œ์ค€์ถœ๋ ฅ์— ํฌํ•จ๋˜์ง€ ์•Š์Œ)
    • 1 : ํ‘œ์ค€์ถœ๋ ฅ(shell์„ ์‹คํ–‰์‹œ์ผฐ์„ ๋•Œ ์ถœ๋ ฅ๋˜๋Š” log)

๐Ÿ“• cron ์‹คํ–‰ํ•  ์‰˜ ์ž‘์„ฑ

  • ์‹œ:๋ถ„:์ดˆ ์ถœ๋ ฅ

๐Ÿ“™ crontab -e

  • cron ์„ค์ • (์ฃผ์„๋œ๋ถ€๋ถ„์€ ์„ค๋ช…์œผ๋กœ ์‚ญ์ œํ•ด๋„๋จ)

    • 1๋ถ„์— ํ•œ๋ฒˆ์”ฉ crontest.sh์—์„œ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ temp.logํŒŒ์ผ์— ์ €์žฅํ•˜๊ฒ ๋‹ค(ํ‘œ์ค€์—๋Ÿฌ๋„ ํ•จ๊ป˜ ์ €์žฅ)
  • ์ €์žฅํ•˜๋ฉด crontab์„ค์น˜ํ–ˆ๋‹ค๊ณ  ๋‚˜์˜ด

  • temp.log๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถœ๋ ฅํ•ด๋ณด๋ฉด ๋งค๋ถ„ ์‹œ๊ฐ„์ด ์ถ”๊ฐ€๋˜์–ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ ํ™•์ธ ๊ฐ€๋Šฅ


profile
Study Log ๐Ÿ“‚

0๊ฐœ์˜ ๋Œ“๊ธ€