← कोर्सच्या मुख्य पानाकडे परत

⏮️ आधी काय होते & फायदे-तोटे

प्रत्येक साधनाने काहीतरी वाईट गोष्ट बदलली — आणि तेच साधन कुठेतरी चुकीचे ठरते. प्रत्येक मोठ्या कल्पनेसाठी: आधी जीवन कसे होते, प्रामाणिक फायदे ✅ / तोटे ❌, आणि कुठे वापरावी 👍 विरुद्ध कुठे नाही 👎.

📜 bash विरुद्ध POSIX sh — धडे 01, 11

⏮️ bash आधी (Bourne shell, 1979)

एकच shell, arrays नाहीत, [[ ]] नाही; दुसरे काहीच नसल्याने scripts संक्षिप्त आणि portable होत्या.

✅ फायदे

  • bash: [[ ]], arrays, ${var//x/y}, local, pipefail — सुरक्षित आणि समृद्ध
  • sh: सगळीकडे चालते, alpine आणि busybox containers सह

❌ तोटे

  • bash: प्रत्येक minimal image वर नाही; bashisms sh खाली मोडतात
  • sh: शब्दबंबाळ, quoting चुकणे सोपे, pipefail नाही

👍 वापरा जेव्हा

  • खऱ्या Linux/macOS मशीनवर किंवा bash image वर कशासाठीही bash
  • alpine वरच्या entrypoints आणि कमाल portability साठी sh (POSIX)

👎 दोनदा विचार करा जेव्हा

  • [[ ]] ने भरलेल्या script च्या माथ्यावर #!/bin/sh
  • फक्त arrays साठी 5 MB image मध्ये bash install करणे

🐍 एका कामासाठी Shell विरुद्ध Python — धडा 04

⏮️ scripting भाषांआधी

सगळे shell + awk + sed होते; quoting आणि data structures शत्रू झाल्यावर Perl, मग Python आले.

✅ फायदे

  • shell: install शून्य, कोणतीही साधने जोडते, एक-ओळी, pipes फुकट
  • Python: खऱ्या data structures, error handling, libraries, tests

❌ तोटे

  • shell: quoting, types नाहीत, ~200 ओळी किंवा nested data पलीकडे त्रासदायक
  • Python: सुरुवातीचा खर्च, एक dependency, एक-ओळीसाठी जास्त सोपस्कार

👍 वापरा जेव्हा

  • सांधे, ops, CI पायऱ्या, मुख्यतः इतर commands बोलावणारे काहीही — shell
  • JSON, logic, किंवा वाचणारी दुसरी व्यक्ती आली की Python

👎 दोनदा विचार करा जेव्हा

  • 1,000 ओळींचे bash deployment साधन
  • दहा फाइल्सची नावे बदलायला Python

🚨 Strict mode विरुद्ध हाताने तपासण्या — धडा 08

⏮️ set -e सामान्य होण्याआधी

नापास cd नंतरही scripts पुढे जायच्या आणि चुकीच्या directory मध्ये गोष्टी पुसायच्या; प्रत्येक command ला स्वतःचा || exit लागायचा.

✅ फायदे

  • set -euo pipefail: एक ओळ बहुतेक शांत अपयशे मोठ्याने करते
  • हाताने तपासण्या: नेमके नियंत्रण, if/&& च्या आत आश्चर्ये नाहीत

❌ तोटे

  • set -e विसंगत आहे (अटींत, || मधल्या functions मध्ये बंद); लोक त्यावर जास्त विश्वास ठेवतात
  • हाताने: शब्दबंबाळ, एखादी विसरणे सोपे

👍 वापरा जेव्हा

  • strict mode अधिक महत्त्वाच्या मार्गांसाठी स्पष्ट तपासण्या
  • अपयश खरोखर चालत असेल तिथे || true

👎 दोनदा विचार करा जेव्हा

  • pipefail शिवाय pipeline मध्ये set -e वर भरवसा
  • दोन्हीपैकी काहीच नसलेली script

🔔 cron विरुद्ध systemd timers विरुद्ध CI schedules — धडा 10

⏮️ cron आधी (1975)

कोणीतरी उशिरापर्यंत थांबून काम हाताने चालवायचे; रात्रीचा अहवाल रात्रपाळीच्या द्वारपालावर अवलंबून होता.

✅ फायदे

  • cron: सगळीकडे, एक ओळ, चाळीस वर्षांची सवय
  • systemd timers: journalctl मध्ये logs, dependencies, टकरी नाहीत, downtime नंतर भरून काढणे
  • CI schedules (Actions cron): सांभाळायला server नाही, run म्हणजे हिरव्या टिकसह एक log

❌ तोटे

  • cron: रिकामी environment, शांत अपयशे, lock नसेल तर टकरणारे runs
  • timers: जास्त फाइल्स, फक्त Linux
  • CI: काही मिनिटांचा उशीर, काम रेपोत असावे लागते

👍 वापरा जेव्हा

  • तुमच्या एका मशीनवर cron
  • आधुनिक Linux servers वर timers
  • रेपोच्या आकाराच्या कामांसाठी CI schedules

👎 दोनदा विचार करा जेव्हा

  • lock शिवाय, एकाच वेळी दोनदा चालू नये अशा कामासाठी cron
  • 2 GB स्थानिक state लागणाऱ्या कामासाठी CI schedule

🧮 awk विरुद्ध खरी भाषा — धडा 04

⏮️ awk आधी (1977)

प्रत्येक अहवालाला C program लागायचा; awk ने 'स्तंभ आत, मोजणी बाहेर' एक-ओळी केले.

✅ फायदे

  • awk: स्तंभ, बेरजा, गट एका ओळीत; प्रत्येक Unix वर; प्रचंड फाइल्स प्रवाहात
  • खरी भाषा: लांबीतही वाचनीय, तपासण्याजोगी, JSON

❌ तोटे

  • awk: END {} पलीकडे कोणालाच आठवत नाही; 40 ओळींवर अवाचनीय
  • भाषा: सुरुवात, dependencies, सोपस्कार

👍 वापरा जेव्हा

  • CSV किंवा log वरच्या एक-ओळीसाठी awk
  • कोणी सांभाळायचा अहवाल — Python

👎 दोनदा विचार करा जेव्हा

  • 200 ओळींचा awk program
  • एक स्तंभ बेरजायला Python

🔀 Pipes विरुद्ध temp फाइल्स — धडा 03

⏮️ pipes आधी (1973)

प्रत्येक पायरी फाइल लिहायची आणि पुढची ती वाचायची; disk हाच अडथळा आणि पसारा होता.

✅ फायदे

  • pipes: प्रवाह, disk नाही, स्वभावतः समांतर, जोडता येणारे
  • temp फाइल्स: तपासता येणाऱ्या, पुन्हा चालवता येणाऱ्या पायऱ्या, दोनदा वाचता येतात

❌ तोटे

  • pipes: एकच फेरी, मधले debug करणे कठीण
  • temp फाइल्स: आवराआवर, शर्यती, disk

👍 वापरा जेव्हा

  • गाळण्या आणि एकदाच्या प्रश्नांसाठी pipes
  • पायरी तपासायची किंवा पुन्हा वापरायची असेल तेव्हा mktemp + trap

👎 दोनदा विचार करा जेव्हा

  • grep आणि sort मध्ये temp फाइल
  • कोणालाच debug न करता येणारा 20 टप्प्यांचा pipe

🧪 bats विरुद्ध bash test runner — धडा 12

⏮️ shell चाचण्यांआधी

scripts production मध्ये चालवून आणि दुसऱ्या सकाळी log वाचून 'तपासल्या' जायच्या.

✅ फायदे

  • bats: खरे framework — setup/teardown, TAP output, CI जोडण्या
  • 30 ओळींचा runner: install काही नाही, वाचायला सोपा, तीच कल्पना

❌ तोटे

  • bats: एक dependency, स्वतःचे syntax
  • runner: तुम्ही सांभाळता; isolation चे मदतनीस नाहीत

👍 वापरा जेव्हा

  • अनेक scripts आणि टीम असलेल्या रेपोसाठी bats
  • छोट्या रेपोसाठी, किंवा bats काय करते ते शिकायला runner

👎 दोनदा विचार करा जेव्हा

  • bats 'खूप जास्त' म्हणून चाचण्याच नाहीत
  • पन्नास चाचण्यांसाठी हाताने setup/teardown