{"id":206,"date":"2026-05-13T11:45:31","date_gmt":"2026-05-13T03:45:31","guid":{"rendered":"https:\/\/junai.ai\/blog\/linux-shell-script-basics-21\/"},"modified":"2026-05-13T11:45:31","modified_gmt":"2026-05-13T03:45:31","slug":"linux-shell-script-basics-21","status":"publish","type":"post","link":"https:\/\/junai.ai\/blog\/linux-shell-script-basics-21\/","title":{"rendered":"\ub9ac\ub205\uc2a4 \uc178 \uc2a4\ud06c\ub9bd\ud2b8 \uc791\uc131\ubc95 \u2014 \ubcc0\uc218\u00b7\uc870\uac74\u00b7\ubc18\ubcf5\u00b7\ud568\uc218 (21\ud3b8)"},"content":{"rendered":"\n<!-- WordPress REST API \ubc1c\ud589\uc6a9 HTML (\uc790\ub3d9 \uc0dd\uc131) -->\n<!-- WP-FEATURED-MEDIA-ID: 201 -->\n<div style=\"max-width:800px;margin:0 auto;\">\n<style>\n:root{\n  --color-primary:#1e40af;--color-accent:#3b82f6;--color-bg:#fafafa;--color-bg-card:#ffffff;\n  --color-text:#1e293b;--color-text-muted:#64748b;--hero-start:#0f172a;--hero-end:#1e40af;\n  --font-body:-apple-system,BlinkMacSystemFont,'Apple SD Gothic Neo','Noto Sans KR',sans-serif;\n  --size-body:17px;--line-height:1.75;--h1-size:32px;--h2-size:27px;--h3-size:20px;\n}\n*{margin:0;padding:0;box-sizing:border-box;}\n.wrap{max-width:760px;margin:0 auto;padding:0 20px;}\n.hero{background:linear-gradient(135deg,var(--hero-start) 0%,var(--hero-end) 100%);color:#fff;padding:64px 0 56px;text-align:center;}\n.hero .eyebrow{display:inline-block;font-size:13px;letter-spacing:1px;text-transform:uppercase;color:#93c5fd;font-weight:700;margin-bottom:16px;}\n.hero h1{font-size:var(--h1-size);line-height:1.32;letter-spacing:-0.3px;font-weight:800;margin-bottom:18px;}\n.hero p.sub{font-size:18px;color:#cbd5e1;max-width:620px;margin:0 auto;}\n.hero .meta{margin-top:22px;font-size:14px;color:#94a3b8;}\n.hero-img{display:block;width:100%;height:auto;}\narticle{padding:48px 0 24px;}\narticle h2{font-size:var(--h2-size);line-height:1.35;letter-spacing:-0.3px;font-weight:800;margin:48px 0 18px;padding-left:14px;border-left:5px solid var(--color-primary);}\narticle h2:first-of-type{margin-top:8px;}\narticle h3{font-size:var(--h3-size);font-weight:700;margin:28px 0 10px;color:#0f172a;}\narticle p{margin:0 0 18px;}\narticle ul,article ol{margin:0 0 18px 4px;padding-left:22px;}\narticle li{margin-bottom:9px;}\narticle strong{color:#0f172a;font-weight:700;}\narticle a{color:var(--color-primary);text-decoration:underline;text-underline-offset:2px;}\narticle code{background:#0f172a;color:#e2e8f0;padding:2px 7px;border-radius:5px;font-size:0.9em;font-family:'SF Mono',Menlo,Consolas,monospace;}\n.intro p:first-child{font-size:19px;color:#334155;}\n.notice{background:#eef2ff;border:1px solid #c7d2fe;border-radius:10px;padding:14px 18px;margin:0 0 30px;font-size:15px;color:#3730a3;}\n.notice b{color:#312e81;}\n.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:22px 0;}\ntable{width:100%;border-collapse:collapse;font-size:15px;background:var(--color-bg-card);}\nth,td{padding:11px 12px;text-align:left;border-bottom:1px solid #e2e8f0;vertical-align:top;}\nth{background:#f1f5f9;font-weight:700;color:#0f172a;}\ntd:first-child,th:first-child{font-weight:700;}\n@media (max-width:560px){\n  .tablewrap table,.tablewrap thead,.tablewrap tbody,.tablewrap tr,.tablewrap th,.tablewrap td{display:block;width:auto;}\n  .tablewrap thead{display:none;}\n  .tablewrap tr{margin:0 0 14px;border:1px solid #e2e8f0;border-radius:10px;overflow:hidden;}\n  .tablewrap td{border:none;border-bottom:1px solid #f1f5f9;padding:9px 14px;}\n  .tablewrap td:first-child{background:#f1f5f9;font-weight:800;font-size:15.5px;}\n  .tablewrap td:last-child{border-bottom:none;}\n  .tablewrap td[data-label]::before{content:attr(data-label) \" \u2014 \";font-weight:700;color:var(--color-primary);}\n}\n.databox{background:#eff6ff;border-left:4px solid var(--color-accent);border-radius:0 8px 8px 0;padding:16px 18px;margin:20px 0;font-size:15.5px;}\n.databox b{color:var(--color-primary);}\n.warnbox{background:linear-gradient(135deg,#fffbeb 0%,#fef3c7 100%);border-radius:10px;padding:16px 18px;margin:22px 0;font-size:15.5px;color:#78350f;}\n.cmd{background:#0f172a;color:#e2e8f0;border-radius:10px;padding:14px 16px;margin:14px 0;font-family:'SF Mono',Menlo,Consolas,monospace;font-size:14px;line-height:1.8;overflow-x:auto;-webkit-overflow-scrolling:touch;white-space:pre-wrap;}\n.cmd .c{color:#7dd3fc;}\n.cmd .o{color:#94a3b8;}\n.cmd .t{color:#fbbf24;}\n.cmd .k{color:#c084fc;}\n.roadmap{background:var(--color-bg-card);border:1px solid #e2e8f0;border-radius:12px;padding:18px 20px;margin:24px 0;font-size:15px;}\n.roadmap h3{margin:0 0 10px;font-size:17px;color:#0f172a;}\n.roadmap ol{margin:0 0 0 4px;padding-left:20px;}\n.roadmap li{margin-bottom:5px;color:#475569;}\n.cta{background:#0f172a;color:#e2e8f0;border-radius:14px;padding:26px 24px;margin:40px 0 8px;text-align:center;}\n.cta h3{color:#fff;margin:0 0 8px;font-size:19px;}\n.cta p{margin:0 0 4px;font-size:15px;color:#cbd5e1;}\n.cta a{color:#93c5fd;}\nfooter{padding:30px 0 50px;text-align:center;color:var(--color-text-muted);font-size:13.5px;}\n@media (max-width:480px){:root{--h1-size:23px;--h2-size:20px;--size-body:16px;}.hero{padding:48px 0 40px;}article{padding:34px 0 16px;}.cmd{font-size:12.5px;}}\n<\/style>\n<header class=\"hero\">\n  <div class=\"wrap\">\n    <span class=\"eyebrow\">\uc6b0\ubd84\ud22c \u00b7 \ub9ac\ub205\uc2a4 \uc785\ubb38 \u2014 21\ud3b8 (\uace0\uae09)<\/span>\n    <h1>\ub9ac\ub205\uc2a4 \uc178 \uc2a4\ud06c\ub9bd\ud2b8 \uc791\uc131\ubc95 \u2014 \ubcc0\uc218\u00b7\uc870\uac74\u00b7\ubc18\ubcf5\u00b7\ud568\uc218<\/h1>\n    <p class=\"sub\">\uc9c0\uae08\uae4c\uc9c0 \ud130\ubbf8\ub110\uc5d0 \uce5c \uba85\ub839\ub4e4\uc744 \ud30c\uc77c \ud558\ub098\uc5d0 \ubaa8\uc544 &#8220;\ud55c \ubc88\uc5d0 \uc2e4\ud589&#8221;\ud558\uac8c \ub9cc\ub4dc\ub294 \uac8c \uc178 \uc2a4\ud06c\ub9bd\ud2b8\uc785\ub2c8\ub2e4. \uc790\ub3d9\ud654\uc758 \ucd9c\ubc1c\uc810\uc774\uc5d0\uc694.<\/p>\n    <p class=\"meta\">2026\ub144 5\uc6d4 13\uc77c \u00b7 \uc57d 8\ubd84 \u00b7 26\ud3b8 \uc785\ubb38 \uc2dc\ub9ac\uc988 21\ud3b8<\/p>\n  <\/div>\n<\/header>\n\n<img decoding=\"async\" class=\"hero-img\" src=\"https:\/\/junai.ai\/blog\/wp-content\/uploads\/2026\/05\/hero-28.jpg\" alt=\"backup.sh \ud30c\uc77c\uc5d0 shebang\u00b7\ubcc0\uc218\u00b7if\u00b7for \ub85c \uba85\ub839\ub4e4\uc744 \ubb36\uc5b4\ub454 \ud130\ubbf8\ub110 \ud654\uba74 \uc77c\ub7ec\uc2a4\ud2b8 \u2014 \uc178 \uc2a4\ud06c\ub9bd\ud2b8 \uc791\uc131\uc744 \uc0c1\uc9d5\">\n\n<div class=\"wrap\">\n<article>\n\n  <div class=\"intro\">\n    <p>20\ud3b8(cron)\uc5d0\uc11c &#8220;\uc815\ud574\uc9c4 \ub54c\uc5d0 \uba85\ub839\uc744 \uc790\ub3d9 \uc2e4\ud589&#8221;\ud558\ub294 \ubc95\uc744 \ubc30\uc6e0\uc8e0. \uadf8\ub7f0\ub370 \uadf8 &#8216;\uba85\ub839&#8217;\uc774 \ud55c \uc904\uc774 \uc544\ub2c8\ub77c &#8220;\ub514\ub809\ud1a0\ub9ac \ub9cc\ub4e4\uace0 \u2192 \ud30c\uc77c \ubcf5\uc0ac\ud558\uace0 \u2192 \uc555\ucd95\ud558\uace0 \u2192 \ub85c\uadf8 \ub0a8\uae30\uace0\u2026&#8221; \uc5ec\ub7ec \uc904\uc774\uba74? \uadf8\uac78 <strong>\ud30c\uc77c \ud558\ub098\uc5d0 \ubb36\uc5b4 \uc774\ub984 \ubd99\uc778 \uac8c \uc178 \uc2a4\ud06c\ub9bd\ud2b8<\/strong>\uc785\ub2c8\ub2e4. \uc5ec\uae30\uc11c\ubd80\ud130\uac00 &#8220;\uace0\uae09&#8221; \u2014 \uba85\ub839\uc744 \uc544\ub294 \uac83\uc5d0\uc11c, \uba85\ub839\uc744 \uc870\ub9bd\ud558\ub294 \uac83\uc73c\ub85c \ub118\uc5b4\uac11\ub2c8\ub2e4.<\/p>\n    <div class=\"notice\"><b>\uba3c\uc800:<\/b> 1~12\ud3b8(\ud130\ubbf8\ub110\u00b7\ud30c\uc77c\u00b7\ud14d\uc2a4\ud2b8\u00b7\uad8c\ud55c\u00b7apt\u00b7\ud30c\uc774\ud504)\uc744 \ubd24\ub2e4\uba74 \ucda9\ubd84\ud569\ub2c8\ub2e4. \ud3b8\uc9d1\uc740 8\ud3b8\uc758 <code>nano<\/code>\ub098 13\ud3b8\uc758 <code>vim<\/code> \ub458 \uc911 \ud3b8\ud55c \uac78\ub85c. \ubaa8\ub4e0 \uc608\uc81c\ub294 \ube48 \ud3f4\ub354\uc5d0\uc11c \uc548\uc804\ud558\uac8c \uc5f0\uc2b5\ud560 \uc218 \uc788\ub294 \uac83\ub4e4\uc785\ub2c8\ub2e4. \uc774\ubc88 \ud3b8\uc740 \u2014 <strong>\u2460 \uccab .sh \ud30c\uc77c \ub9cc\ub4e4\uace0 \uc2e4\ud589 \u2192 \u2461 \ubcc0\uc218\u00b7\uc785\ub825 \u2192 \u2462 if\u00b7for\u00b7while \u2192 \u2463 \ud568\uc218\u00b7\uc778\uc790\u00b7\uc885\ub8cc\ucf54\ub4dc<\/strong>.<\/div>\n  <\/div>\n\n  <h2>\uccab .sh \ud30c\uc77c \ub9cc\ub4e4\uace0 \uc2e4\ud589\ud558\uae30<\/h2>\n  <p>\ud30c\uc77c \ud558\ub098 \ub9cc\ub4e4\uc5b4\ubd05\ub2c8\ub2e4. <code>nano hello.sh<\/code> \ub85c \uc5f4\uc5b4 \uc774\ub807\uac8c \uc801\uc73c\uc138\uc694:<\/p>\n  <div class=\"cmd\"><span class=\"c\">#!\/bin\/bash<\/span>\n<span class=\"o\"># \uc704 \uc904(shebang)\uc740 &#8220;\uc774 \ud30c\uc77c\uc744 bash \ub85c \uc2e4\ud589\ud574\ub77c&#8221;\ub294 \ud45c\uc2dc \u2014 \ud56d\uc0c1 1\ubc88 \uc904\uc5d0<\/span>\n<span class=\"o\"># # \uc73c\ub85c \uc2dc\uc791\ud558\ub294 \uc904\uc740 \uc8fc\uc11d(\uc2e4\ud589 \uc548 \ub428)<\/span>\necho <span class=\"t\">&#8220;\uc548\ub155, \uc178 \uc2a4\ud06c\ub9bd\ud2b8!&#8221;<\/span>\necho <span class=\"t\">&#8220;\uc624\ub298\uc740 $(date +%Y-%m-%d)&#8221;<\/span>   <span class=\"o\"># $(\uba85\ub839) \uc740 \uadf8 \uba85\ub839\uc758 \uacb0\uacfc\ub85c \ubc14\ub01c<\/span><\/div>\n  <p>\uc800\uc7a5\ud558\uace0 \ub098\uc640\uc11c, \uc2e4\ud589 \uad8c\ud55c\uc744 \uc900 \ub2e4\uc74c(9\ud3b8\uc758 <code>chmod<\/code> \uae30\uc5b5\ub098\uc8e0?) \ub3cc\ub9bd\ub2c8\ub2e4:<\/p>\n  <div class=\"cmd\"><span class=\"o\">$<\/span> chmod +x hello.sh        <span class=\"o\"># \uc2e4\ud589 \uac00\ub2a5\ud558\uac8c<\/span>\n<span class=\"o\">$<\/span> .\/hello.sh               <span class=\"o\"># \uac19\uc740 \ud3f4\ub354\uc758 \uc2a4\ud06c\ub9bd\ud2b8\ub294 .\/ \ub97c \ubd99\uc5ec\uc11c \uc2e4\ud589<\/span>\n<span class=\"o\">\uc548\ub155, \uc178 \uc2a4\ud06c\ub9bd\ud2b8!<\/span>\n<span class=\"o\">\uc624\ub298\uc740 2026-05-13<\/span><\/div>\n  <p><code>.\/<\/code> \ub97c \ubd99\uc774\ub294 \uc774\uc720\ub294 12\ud3b8\uc5d0\uc11c \ubcf8 PATH \ub54c\ubb38 \u2014 \ud604\uc7ac \ud3f4\ub354\ub294 \ubcf4\ud1b5 PATH\uc5d0 \uc5c6\uc5b4\uc11c &#8220;\uc5ec\uae30 \uc788\ub294 \uac70 \uc2e4\ud589\ud574&#8221;\ub77c\uace0 \uba85\uc2dc\ud574\uc918\uc57c \ud569\ub2c8\ub2e4. \ub610\ub294 <code>bash hello.sh<\/code> \ucc98\ub7fc \uc2e4\ud589\ud574\ub3c4 \ub429\ub2c8\ub2e4(\uc774\ub7ec\uba74 <code>chmod +x<\/code> \uc5c6\uc5b4\ub3c4 OK).<\/p>\n\n  <h2>\ubcc0\uc218\uc640 \uc785\ub825 \u2014 \uac12\uc744 \ub2f4\uace0 \ubc1b\uae30<\/h2>\n  <p>\ubcc0\uc218\ub294 <strong>\ub4f1\ud638 \uc591\uc606\uc5d0 \uacf5\ubc31 \uc5c6\uc774<\/strong> <code>\uc774\ub984=\uac12<\/code>, \uc4f8 \ub550 \uc55e\uc5d0 <code>$<\/code>. \uc774\uac8c \uc178\uc758 \uac00\uc7a5 \ud754\ud55c \ucd08\ubcf4 \ud568\uc815\uc774\uc5d0\uc694(<code>x = 5<\/code> \ub294 \uc5d0\ub7ec \u2014 <code>x=5<\/code>).<\/p>\n  <div class=\"cmd\">name=<span class=\"t\">&#8220;\uc900\uc131&#8221;<\/span>\ncount=3\necho <span class=\"t\">&#8220;$name \ub2d8, \ud56d\ubaa9 ${count}\uac1c&#8221;<\/span>      <span class=\"o\"># ${} \ub294 \ubcc0\uc218 \uacbd\uacc4\uac00 \ud5f7\uac08\ub9b4 \ub54c<\/span>\ntoday=<span class=\"t\">$(date +%F)<\/span>                   <span class=\"o\"># \uba85\ub839 \uacb0\uacfc\ub97c \ubcc0\uc218\uc5d0<\/span>\necho <span class=\"t\">&#8220;\uc624\ub298: $today \/ \ud648: $HOME&#8221;<\/span>      <span class=\"o\"># $HOME \uac19\uc740 \ud658\uacbd\ubcc0\uc218\ub3c4 \uadf8\ub300\ub85c \uc500<\/span>\n\n<span class=\"k\">read<\/span> -p <span class=\"t\">&#8220;\uc774\ub984\uc744 \uc785\ub825\ud558\uc138\uc694: &#8220;<\/span> who   <span class=\"o\"># \uc0ac\uc6a9\uc790 \uc785\ub825\uc744 who \uc5d0 \ub2f4\uae30<\/span>\necho <span class=\"t\">&#8220;\ubc18\uac00\uc6cc\uc694, $who!&#8221;<\/span><\/div>\n  <div class=\"databox\"><b>\ub530\uc634\ud45c\ub294 \uac70\uc758 \ud56d\uc0c1 \ud070\ub530\uc634\ud45c\ub85c:<\/b> <code>echo $name<\/code> \ucc98\ub7fc <b>\uc778\uc6a9 \uc548 \ud558\uba74<\/b> \uac12\uc5d0 \uacf5\ubc31\uc774 \uc788\uc744 \ub54c \ub2e8\uc5b4\uac00 \ucabc\uac1c\uc9d1\ub2c8\ub2e4(<code>\"\ud64d \uae38\ub3d9\"<\/code> \u2192 <code>\ud64d<\/code> <code>\uae38\ub3d9<\/code> \ub450 \uac1c\ub85c). <code>echo \"$name\"<\/code> \ucc98\ub7fc <b>\ud070\ub530\uc634\ud45c\ub85c \uac10\uc2f8\uba74<\/b> \ud1b5\uc9f8\ub85c \ud55c \ub369\uc5b4\ub9ac + <code>$\ubcc0\uc218<\/code>\u00b7<code>$(\uba85\ub839)<\/code>\uc740 \uadf8\ub300\ub85c \uce58\ud658\ub429\ub2c8\ub2e4. \uc791\uc740\ub530\uc634\ud45c <code>'...'<\/code> \ub294 \uce58\ud658\ub3c4 \uc548 \ud568(\uae00\uc790 \uadf8\ub300\ub85c). \ud5f7\uac08\ub9ac\uba74 <strong>\ud070\ub530\uc634\ud45c<\/strong>\uac00 \uc815\ub2f5.<\/div>\n\n  <h2>\ud750\ub984 \uc81c\uc5b4 \u2014 \uc870\uac74\ubb38\uacfc \ubc18\ubcf5\ubb38<\/h2>\n  <p><strong>\uc870\uac74\ubb38:<\/strong> <code>if [ \uc870\uac74 ]; then ... fi<\/code>. \ub300\uad04\ud638 \uc548\ud30e\uc5d0 <strong>\uacf5\ubc31 \ud544\uc218<\/strong>(<code>[ \"$x\" = \"5\" ]<\/code> \u2014 <code>[<\/code> \ub3c4, <code>]<\/code> \ub3c4 \uacf5\ubc31). \uc22b\uc790 \ube44\uad50\ub294 <code>-eq -ne -lt -le -gt -ge<\/code>, \ubb38\uc790\uc5f4\uc740 <code>=<\/code> <code>!=<\/code>, \ud30c\uc77c\uc740 <code>-f<\/code>(\ud30c\uc77c \uc874\uc7ac) <code>-d<\/code>(\ub514\ub809\ud1a0\ub9ac) <code>-e<\/code>(\uc874\uc7ac) <code>!<\/code>(\ubd80\uc815).<\/p>\n  <div class=\"cmd\"><span class=\"k\">if<\/span> [ ! -d <span class=\"t\">&#8220;$HOME\/backup&#8221;<\/span> ]; <span class=\"k\">then<\/span>\n    mkdir -p <span class=\"t\">&#8220;$HOME\/backup&#8221;<\/span>\n    echo <span class=\"t\">&#8220;backup \ud3f4\ub354 \ub9cc\ub4e6&#8221;<\/span>\n<span class=\"k\">elif<\/span> [ -f <span class=\"t\">&#8220;$HOME\/backup\/old.tar&#8221;<\/span> ]; <span class=\"k\">then<\/span>\n    echo <span class=\"t\">&#8220;\uc774\ubbf8 \ubc31\uc5c5\uc774 \uc788\uc74c&#8221;<\/span>\n<span class=\"k\">else<\/span>\n    echo <span class=\"t\">&#8220;\ud3f4\ub354\ub294 \uc788\ub294\ub370 \ubc31\uc5c5 \ud30c\uc77c\uc740 \uc5c6\uc74c&#8221;<\/span>\n<span class=\"k\">fi<\/span>\n\n<span class=\"o\"># &#038;&#038; \uc640 || \ub85c \uc9e7\uac8c: \uc55e\uc774 \uc131\uacf5\ud558\uba74 &#038;&#038; \ub4a4 \uc2e4\ud589, \uc2e4\ud328\ud558\uba74 || \ub4a4 \uc2e4\ud589<\/span>\nmkdir -p logs <span class=\"k\">&#038;&#038;<\/span> echo <span class=\"t\">&#8220;ok&#8221;<\/span> <span class=\"k\">||<\/span> echo <span class=\"t\">&#8220;\uc2e4\ud328&#8221;<\/span><\/div>\n  <p><strong>\ubc18\ubcf5\ubb38:<\/strong> <code>for<\/code> \ub294 \ubaa9\ub85d\uc744 \ud558\ub098\uc529, <code>while<\/code> \uc740 \uc870\uac74\uc774 \ucc38\uc778 \ub3d9\uc548. <code>break<\/code> \ub85c \uc911\ub2e8, <code>continue<\/code> \ub85c \ub2e4\uc74c \ucc28\ub840.<\/p>\n  <div class=\"cmd\"><span class=\"k\">for<\/span> f <span class=\"k\">in<\/span> *.log; <span class=\"k\">do<\/span>            <span class=\"o\"># \ud604\uc7ac \ud3f4\ub354\uc758 .log \ud30c\uc77c\ub4e4\uc744 \ud558\ub098\uc529 f \uc5d0<\/span>\n    echo <span class=\"t\">&#8220;\ucc98\ub9ac \uc911: $f&#8221;<\/span>\n    cp <span class=\"t\">&#8220;$f&#8221; &#8220;$HOME\/backup\/&#8221;<\/span>\n<span class=\"k\">done<\/span>\n\n<span class=\"k\">for<\/span> i <span class=\"k\">in<\/span> {1..5}; <span class=\"k\">do<\/span> echo <span class=\"t\">&#8220;$i \ubc88\uc9f8&#8221;<\/span>; <span class=\"k\">done<\/span>   <span class=\"o\"># {1..5} = 1 2 3 4 5<\/span>\n\nn=1\n<span class=\"k\">while<\/span> [ <span class=\"t\">&#8220;$n&#8221;<\/span> -le 3 ]; <span class=\"k\">do<\/span>\n    echo <span class=\"t\">&#8220;\uce74\uc6b4\ud2b8 $n&#8221;<\/span>\n    n=<span class=\"t\">$((n + 1))<\/span>                <span class=\"o\"># $((  )) \uc548\uc5d0\uc11c \uc0b0\uc220 \uc5f0\uc0b0<\/span>\n<span class=\"k\">done<\/span><\/div>\n\n  <h2>\ud568\uc218\u00b7\uc778\uc790\u00b7\uc885\ub8cc\ucf54\ub4dc \u2014 \uadf8\ub9ac\uace0 \uc815\ub9ac<\/h2>\n  <p><strong>\ud568\uc218<\/strong>\ub294 <code>\uc774\ub984() { ... }<\/code> \ub85c \uc815\uc758, \ud638\ucd9c\uc740 \uadf8\ub0e5 <code>\uc774\ub984<\/code>. \ud568\uc218 \uc548\uc5d0\uc11c <code>$1 $2<\/code> \ub294 <strong>\ud568\uc218\uc5d0 \ub118\uae34 \uc778\uc790<\/strong>\uc785\ub2c8\ub2e4. <strong>\uc2a4\ud06c\ub9bd\ud2b8 \uc790\uccb4\uc5d0 \ub118\uae34 \uc778\uc790<\/strong>\ub3c4 <code>$1 $2 \u2026<\/code>, \uc804\ubd80\ub294 <code>$@<\/code>, \uac1c\uc218\ub294 <code>$#<\/code>, \uc2a4\ud06c\ub9bd\ud2b8 \uc774\ub984\uc740 <code>$0<\/code>.<\/p>\n  <div class=\"cmd\">log() {                          <span class=\"o\"># \ud568\uc218 \uc815\uc758<\/span>\n    echo <span class=\"t\">&#8220;[$(date +%T)] $1&#8221;<\/span>     <span class=\"o\"># \ud568\uc218\uc5d0 \ub118\uc5b4\uc628 \uccab \uc778\uc790 = $1<\/span>\n}\nbackup_one() {\n    cp <span class=\"t\">&#8220;$1&#8221; &#8220;$2&#8221;<\/span> <span class=\"k\">&#038;&#038;<\/span> log <span class=\"t\">&#8220;$1 \u2192 $2 \uc644\ub8cc&#8221;<\/span>\n}\n\n<span class=\"o\"># \uc2a4\ud06c\ub9bd\ud2b8 \uc778\uc790 \ubc1b\uae30: .\/myscript.sh a.txt \/tmp  \u2192  $1=a.txt  $2=\/tmp<\/span>\n<span class=\"k\">if<\/span> [ <span class=\"t\">&#8220;$#&#8221;<\/span> -lt 2 ]; <span class=\"k\">then<\/span>\n    echo <span class=\"t\">&#8220;\uc0ac\uc6a9\ubc95: $0 &lt;\uc6d0\ubcf8&gt; &lt;\ub300\uc0c1\ud3f4\ub354&gt;&#8221;<\/span>\n    <span class=\"k\">exit<\/span> 1                     <span class=\"o\"># 0 = \uc131\uacf5, 0 \uc544\ub2d8 = \uc2e4\ud328. \uc778\uc790 \ubd80\uc871\uc774\uba74 1 \ub85c \uc885\ub8cc<\/span>\n<span class=\"k\">fi<\/span>\nbackup_one <span class=\"t\">&#8220;$1&#8221; &#8220;$2&#8221;<\/span>\nlog <span class=\"t\">&#8220;\ub05d. \uc885\ub8cc\ucf54\ub4dc \uc9c1\uc804 \uac12: $?&#8221;<\/span>   <span class=\"o\"># $? = \uc9c1\uc804 \uba85\ub839\uc758 \uc885\ub8cc\ucf54\ub4dc<\/span>\n<span class=\"k\">exit<\/span> 0<\/div>\n  <p><strong>\uc885\ub8cc\ucf54\ub4dc(exit code)<\/strong>\ub294 &#8220;\uc774 \uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc798 \ub05d\ub0ac\ub098&#8221;\ub97c \ub2e4\uc74c \uc0ac\ub78c(\ud639\uc740 cron, \ud639\uc740 \ub2e4\ub978 \uc2a4\ud06c\ub9bd\ud2b8)\uc5d0\uac8c \uc54c\ub824\uc8fc\ub294 \uc2e0\ud638\uc785\ub2c8\ub2e4 \u2014 <code>0<\/code>\uc774\uba74 \uc131\uacf5, \uadf8 \uc678\ub294 \uc2e4\ud328. \uc9c1\uc804 \uba85\ub839\uc758 \uc885\ub8cc\ucf54\ub4dc\ub294 <code>$?<\/code> \uc5d0 \ub4e4\uc5b4 \uc788\uc5b4\uc11c, <code>if \uba85\ub839; then \u2026<\/code> \ucc98\ub7fc \uba85\ub839\uc744 \uadf8\ub300\ub85c \uc870\uac74\uc73c\ub85c \uc4f8 \uc218\ub3c4 \uc788\uc5b4\uc694(0\uc774\uba74 \ucc38 \ucde8\uae09).<\/p>\n  <div class=\"warnbox\"><strong>\ucd08\ubcf4\uac00 \uac70\uc758 \ub2e4 \ub2f9\ud558\ub294 \uc14b:<\/strong> \u2460 <code>x = 5<\/code> \u2014 \ub4f1\ud638 \uc591\uc606 \uacf5\ubc31 \uae08\uc9c0(<code>x=5<\/code>). \u2461 <code>[ $x = 5 ]<\/code> \uc5d0\uc11c <code>$x<\/code> \uac00 \ube44\uc5b4 \uc788\uc73c\uba74 \uc5d0\ub7ec \u2014 <strong>\ubcc0\uc218\ub294 \ud070\ub530\uc634\ud45c\ub85c<\/strong> <code>[ \"$x\" = \"5\" ]<\/code>. \u2462 <code>[<\/code> \uc640 <code>]<\/code> \uc591\uc606 \uacf5\ubc31 \ube7c\uba39\uae30 \u2014 <code>[ \"$x\" -gt 3 ]<\/code>. \uc774 \uc14b\ub9cc \uc870\uc2ec\ud558\uba74 \uccab \uc2a4\ud06c\ub9bd\ud2b8\ub294 \uac70\uc758 \uad74\ub7ec\uac11\ub2c8\ub2e4.<\/div>\n  <div class=\"roadmap\">\n    <h3>\uc2dc\ub9ac\uc988 \ud750\ub984<\/h3>\n    <ol>\n      <li>1~12\ud3b8 \uc785\ubb38\u00b7\uae30\ucd08 \u2714 &nbsp; 13~20\ud3b8 \uc911\uae09(vim\u00b7\ud504\ub85c\uc138\uc2a4\u00b7\ub514\uc2a4\ud06c\u00b7\ub124\ud2b8\uc6cc\ud06c\u00b7ufw\u00b7SSH\u00b7systemd\u00b7cron) \u2714<\/li>\n      <li><strong>21\ud3b8 \u2014 \uc178 \uc2a4\ud06c\ub9bd\ud2b8 \uc791\uc131\ubc95 (\uc774 \uae00)<\/strong> \u2714 \u2014 &#8220;\uace0\uae09&#8221; \ubb36\uc74c \uc2dc\uc791<\/li>\n      <li>22\ud3b8 \u2014 \uc548\uc804\ud55c \uc178 \uc2a4\ud06c\ub9bd\ud2b8(<code>set -euo pipefail<\/code>\u00b7trap\u00b7shellcheck)<\/li>\n      <li>23\ud3b8~ \u2014 grep\u00b7sed\u00b7awk \/ \ub85c\uadf8\u00b7\ubaa8\ub2c8\ud130\ub9c1 \/ \uc11c\ubc84 \ubcf4\uc548 \ud558\ub4dc\ub2dd \/ \ub3c4\ucee4 \uc785\ubb38<\/li>\n    <\/ol>\n  <\/div>\n  <p>\uc815\ub9ac\ud558\uba74 \u2014 \uc178 \uc2a4\ud06c\ub9bd\ud2b8\ub294 &#8220;\uc678\uc6b4 \uba85\ub839\ub4e4\uc744 \ud30c\uc77c\uc5d0 \ubaa8\uc544, \ubcc0\uc218\ub85c \uc720\uc5f0\ud558\uac8c, if\u00b7for\ub85c \uc0c1\ud669\uc5d0 \ub9de\uac8c, \ud568\uc218\ub85c \uae54\ub054\ud558\uac8c, exit\ub85c \uacb0\uacfc\ub97c \uc54c\ub9ac\ub294&#8221; \uac83\uc785\ub2c8\ub2e4. \uc791\uc740 \uac83\ubd80\ud130 \uc2dc\uc791\ud558\uc138\uc694: \uc790\uc8fc \uce58\ub294 \uba85\ub839 \ub450\uc138 \uac1c\ub97c <code>.sh<\/code> \ud30c\uc77c\uc5d0 \ub123\uace0 <code>chmod +x<\/code> \u2192 \uc2e4\ud589. \uadf8\uac8c \uccab \uc790\ub3d9\ud654\uc785\ub2c8\ub2e4. 22\ud3b8\uc5d0\uc11c\ub294 \uc774 \uc2a4\ud06c\ub9bd\ud2b8\uac00 <strong>\uc870\uc6a9\ud788 \ub9dd\uac00\uc9c0\uc9c0 \uc54a\uac8c<\/strong> \ub9cc\ub4dc\ub294 \ubc95(<code>set -euo pipefail<\/code> \ub4f1 \ubca0\uc2a4\ud2b8 \ud504\ub799\ud2f0\uc2a4)\uc744 \ub2e4\ub8f9\ub2c8\ub2e4.<\/p>\n\n  <p style=\"font-size:15px;color:#64748b;\">\ucc38\uace0: \ubcf8 \uae00\uc740 bash(\uc6b0\ubd84\ud22c \uae30\ubcf8 \uc178) \uae30\uc900\uc774\uba70 2026\ub144 5\uc6d4 13\uc77c\uc5d0 \uc791\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc77c\ubd80 \ubb38\ubc95\uc740 sh\/dash(POSIX)\uc640 \ub2e4\ub974\ub2c8, \uc2a4\ud06c\ub9bd\ud2b8 \uccab \uc904\uc744 <code>#!\/bin\/bash<\/code>\ub85c \uba85\uc2dc\ud558\uc138\uc694.<\/p>\n\n  <div class=\"cta\">\n    <h3>\uc6b0\ubd84\ud22c\u00b7\ub9ac\ub205\uc2a4 \uc785\ubb38 \uc2dc\ub9ac\uc988<\/h3>\n    <p>\uba85\ub839\uc744 \uc544\ub294 \ub2e8\uacc4\uc5d0\uc11c \uba85\ub839\uc744 \uc870\ub9bd\ud558\ub294 \ub2e8\uacc4\ub85c \u2014 &#8220;\uace0\uae09&#8221; \ubb36\uc74c \uccab \ud3b8\uc785\ub2c8\ub2e4. 22\ud3b8 &#8220;\uc548\uc804\ud55c \uc178 \uc2a4\ud06c\ub9bd\ud2b8&#8221;\ub85c \uc774\uc5b4\uc9d1\ub2c8\ub2e4.<\/p>\n    <p>\ub2e4\uc74c \ud3b8\uc740 <a href=\"https:\/\/junai.ai\/blog\" target=\"_blank\" rel=\"noopener\">junai.ai\/blog<\/a> \uc5d0\uc11c \u2014 26\ud3b8\uae4c\uc9c0 \ucc28\ub840\ub85c \uc62c\ub77c\uc635\ub2c8\ub2e4.<\/p>\n  <\/div>\n\n<\/article>\n<\/div>\n\n<footer>\n  <div class=\"wrap\">\u00a9 2026 JUNAI \u00b7 \uc6b0\ubd84\ud22c\u00b7\ub9ac\ub205\uc2a4 \uc785\ubb38 \uc2dc\ub9ac\uc988 21\ud3b8 \u00b7 \ubcf8 \uae00\uc740 2026\ub144 5\uc6d4 13\uc77c \uae30\uc900\uc73c\ub85c \uc791\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/div>\n<\/footer>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\uc178 \uc2a4\ud06c\ub9bd\ud2b8 \uc785\ubb38 \u2014 \uccab .sh \ub9cc\ub4e4\uae30, \ubcc0\uc218\u00b7$(\uba85\ub839)\u00b7read, if\u00b7for\u00b7while, \ud568\uc218\u00b7$1\u00b7exit \uc885\ub8cc\ucf54\ub4dc. \ub9ac\ub205\uc2a4 \uc785\ubb38 21\ud3b8(\uace0\uae09).<\/p>\n","protected":false},"author":1,"featured_media":201,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[],"class_list":["post-206","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ubuntu-linux"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/posts\/206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/comments?post=206"}],"version-history":[{"count":0,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/posts\/206\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/media\/201"}],"wp:attachment":[{"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/media?parent=206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/categories?post=206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/tags?post=206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}