Ravindra BagaleCourses & study guides English

Shell Scripting Complete 9: Arithmetic, Exit Codes, set -euo pipefail आणि Error Handling

Failure नंतरही चालू राहणारी script धोकादायक असते: ती चुकीचा folder delete करू शकते किंवा अर्धा backup upload करू शकते. या chapter मधे $(( )) आणि (( )) ने bash arithmetic, bc आणि awk ने decimals, exit codes काय आणि $? व PIPESTATUS कसे वाचायचे, && आणि || ने steps कसे जोडायचे, safe header set -euo pipefail आणि त्याचे traps, आणि die function, return codes व retries ने clean error handling शिकाल. प्रत्येक topic रोजच्या उदाहरणाने सुरू होतो आणि मग अनेक industries ची उदाहरणं.

या chapter मध्ये तुम्ही काय शिकाल

  • $(( )) आणि (( )) ने integer maths
  • bc किंवा awk ने decimal maths
  • $? आणि PIPESTATUS ने exit codes
  • && आणि || ने steps जोडा
  • set -euo pipefail safely वापरा
  • die, retry आणि clean error messages

1. रोजचं उदाहरण: pressure cooker ची शिट्टी

हे का लागतं?

पुण्याच्या स्वयंपाकघरात cooker ची शिट्टी काय झालं ते सांगते. तीन शिट्ट्या म्हणजे झालं. शिट्टी नाही म्हणजे काहीतरी चुकलं, वाढण्याआधी तपासा. डाळ शिजली की नाही न बघता कोणी वाढत नाही. Command चा exit code ती शिट्टी आहे: 0 म्हणजे success, इतर कोणताही number म्हणजे problem, आणि चांगली script पुढच्या step आधी ती ऐकते.

हे काय आहे?

शिट्टी = exit code. ऐकणं = $? तपासणं किंवा if. काही चुकलं तर थांबणं = set -e किंवा || die. शिट्ट्या मोजणं = (( )) ने arithmetic. Gas गेला तर पुन्हा प्रयत्न = retry loop.

कसं करायचं (step by step)

Safe script step कशी handle करतेCommand चालवाExit code 0? पुढे0 नाही? stderr वर clear errorTemp files cleanNon-zero code ने exitCaller किंवा cron ला failure दिसतं
Failure कधी लपवू नका; मोठ्याने सांगा.

2. $(( )) आणि (( )) ने integer maths

हे का लागतं?

Files मोजणं, totals बेरीज, disk alert साठी percentage: scripts सतत छोटं maths करतात.

हे काय आहे?

$(( expr )) result text म्हणून देतो. (( expr )) maths चालवतो आणि result शून्य नसेल तर exit code 0, म्हणून test म्हणून चालतो. आत names आधी $ लागत नाही. Operators: + - * / % ** आणि comparisons < > == !=. Division फक्त integer: 7/2 म्हणजे 3. let आणि expr जुने मार्ग; (( )) वापरा.

प्रकारवापर
$((a+b))result text म्हणून
((n++))n वाढवा
((a>b))test, true असेल तर exit 0
$((7%3))बाकी 1
$((2**10))power 1024

कसं करायचं (step by step)

  1. Totals बेरीज.
a=1200; b=850; echo $((a+b))

Output:

2050

याचा अर्थ: आत $ नको.

  1. Counter.
n=0; for f in *.log; do ((n++)); done; echo $n

Output:

3

याचा अर्थ: Files मोजतो.

  1. Percentage.
used=45; total=60; echo $((used*100/total))%

Output:

75%

याचा अर्थ: आधी गुणा, मग भागा.

  1. Compare.
disk=91; (( disk > 85 )) && echo 'disk alert'

Output:

disk alert

याचा अर्थ: (( )) test म्हणून.

  1. Even की odd.
x=7; (( x % 2 == 0 )) && echo even || echo odd

Output:

odd

याचा अर्थ: बाकी check.

3. bc आणि awk ने decimals

हे का लागतं?

पैशांसह prices, 18 percent GST, ms मधे average response time: एकटा bash decimals करू शकत नाही.

हे काय आहे?

bc एक calculator आहे: echo 'scale=2; 10/3' | bc ने 3.33. scale decimal places ठरवतो. awk पण करू शकतो: awk 'BEGIN{printf "%.2f\n", 10/3}'. Decimals compare करायला bc किंवा awk कडून 1 किंवा 0 घ्या आणि तो test करा. लक्ष द्या: काही minimal images वर bc नसतो; awk जवळजवळ नेहमी असतो.

कसं करायचं (step by step)

  1. Decimals सह भागाकार.
echo 'scale=2; 10/3' | bc

Output:

3.33

याचा अर्थ: scale=2.

  1. GST.
price=499.50; echo "scale=2; $price*1.18" | bc

Output:

589.41

याचा अर्थ: 18 percent जोडले.

  1. awk average.
printf '120\n95\n310\n' | awk '{s+=$1} END{printf "%.1f\n", s/NR}'

Output:

175.0

याचा अर्थ: Average response ms.

  1. Decimals compare.
load=3.75; (( $(echo "$load > 2.5" | bc) )) && echo high

Output:

high

याचा अर्थ: true साठी bc 1 देतो.

4. Exit codes, $? आणि PIPESTATUS

हे का लागतं?

Cron, CI systems आणि इतर scripts फक्त तुमच्या exit code वरून success की failure ठरवतात.

हे काय आहे?

प्रत्येक command 0 ते 255 मधल्या number ने संपतो. 0 म्हणजे success. 1 general error, 2 misuse, 126 executable नाही, 127 command not found, 130 Ctrl+C ने थांबलं, 137 killed (बहुदा out of memory). $? मधे शेवटचा code; लगेच वाचा कारण पुढचा command तो बदलतो. Pipe मधे $? शेवटच्या command चा; ${PIPESTATUS[@]} मधे सगळे. exit N script संपवतो, return N function संपवतो.

Codeअर्थ
0success
1general error
2चुकीचा वापर
126executable नाही
127command सापडला नाही
130Ctrl+C
137signal 9 ने killed

कसं करायचं (step by step)

  1. Success code.
ls /etc/hostname; echo $?

Output:

/etc/hostname
0

याचा अर्थ: 0 = OK.

  1. Failure code.
ls /nope; echo $?

Output:

ls: cannot access '/nope': No such file or directory
2

याचा अर्थ: 0 नाही.

  1. सापडला नाही.
nosuchcmd; echo $?

Output:

bash: nosuchcmd: command not found
127

याचा अर्थ: 127.

  1. Pipe codes.
false | true; echo "$? ${PIPESTATUS[@]}"

Output:

0 1 0

याचा अर्थ: शेवटचा true, पहिला fail.

  1. आधी save.
grep -q ERROR app.log; rc=$?; echo "grep said $rc"

Output:

grep said 1

याचा अर्थ: 1 म्हणजे match नाही.

5. && आणि || ने steps जोडा

हे का लागतं?

Build झालं तरच deploy; check fail झाला तरच alert.

हे काय आहे?

a && b, a यशस्वी झाला तरच b चालवतो. a || b, a fail झाला तरच b. if cmd; then ... fi command चा exit code थेट test करतो, म्हणून $? क्वचितच लागतो. ! cmd result उलटा करतो. a && b || c ची काळजी: b fail झाला तरी c चालतो, म्हणून हा खरा if-else नाही; महत्त्वाच्या logic साठी if वापरा.

कसं करायचं (step by step)

  1. Success वरच.
mkdir -p /tmp/rel && cd /tmp/rel && pwd

Output:

/tmp/rel

याचा अर्थ: पहिल्या failure ला थांबतो.

  1. Failure वरच.
ping -c1 -W1 10.9.9.9 || echo 'gateway down'

Output:

gateway down

याचा अर्थ: Alert path.

  1. Command वर if.
if grep -q 'Out of memory' /var/log/syslog; then echo 'OOM seen'; fi

Output:

OOM seen

याचा अर्थ: $? नको.

  1. उलटं.
if ! id deploy; then echo 'no deploy user'; fi

Output:

id: 'deploy': no such user
no deploy user

याचा अर्थ: ! उलटतो.

6. Safe header: set -euo pipefail

हे का लागतं?

Default bash failures आणि unset variables ignore करतो. रिकाम्या DIR सह rm -rf "$DIR/" सारखा एक typo disaster होऊ शकतो.

हे काय आहे?

set -e command fail झाल्यावर exit करतो. set -u unset variables ला error मानतो. set -o pipefail pipe चा कोणताही भाग fail झाला तर pipe fail करतो. एकत्र: set -euo pipefail. मर्यादा जाणा: -e if conditions मधे, && किंवा || lists च्या भागात, किंवा n 0 असताना ((n++)) सारख्या commands साठी चालत नाही/अडचण करतो (ते 1 देतं आणि script मारतं). n=$((n+1)) किंवा ((n++)) || true वापरा. Match नसेल तर grep 1 देतो, ते चालत असेल तर || true जोडा.

Optionपरिणाम
-eerror वर exit
-uunset variable error
-o pipefailकोणताही भाग fail तर pipe fail
-xप्रत्येक command trace

कसं करायचं (step by step)

  1. Header.
#!/usr/bin/env bash
set -euo pipefail

याचा अर्थ: Script च्या पहिल्या lines.

  1. -u typos पकडतो.
set -u; echo "$DIRR"

Output:

bash: DIRR: unbound variable

याचा अर्थ: नुकसानाआधी थांबतो.

  1. pipefail.
set -o pipefail; false | sort; echo $?

Output:

1

याचा अर्थ: त्याशिवाय 0 मिळतो.

  1. Counter trap.
set -e; n=0; ((n++)); echo never

याचा अर्थ: Script exit; n=$((n+1)) वापरा.

  1. चालणारं failure.
count=$(grep -c WARN app.log || true); echo $count

Output:

0

याचा अर्थ: इथे match नसणं OK.

7. Clear errors: stderr, die आणि usage

हे का लागतं?

Normal output मधे मिसळलेले error messages pipes बिघडवतात आणि रात्री 3 ला on-call व्यक्तीला गोंधळवतात.

हे काय आहे?

Errors stderr ला echo 'msg' >&2 ने पाठवा. Message print करून code सह exit करणारं छोटं die function लिहा. Arguments चुकले तर usage line print करा आणि exit 2. ${0##*/} ने script name आणि काय fail झालं ते लिहा, म्हणजे message logs मधे उपयोगी.

कसं करायचं (step by step)

  1. stderr ला.
echo 'config missing' >&2

Output:

config missing

याचा अर्थ: stdout मधे नाही.

  1. die function.
die(){ echo "${0##*/}: $*" >&2; exit "${2:-1}"; }
[[ -r app.conf ]] || die 'cannot read app.conf'

Output:

backup.sh: cannot read app.conf

याचा अर्थ: Clear आणि exit 1.

  1. Usage.
(( $# == 1 )) || { echo "usage: ${0##*/} ENV" >&2; exit 2; }

Output:

usage: deploy.sh ENV

याचा अर्थ: Exit 2 = चुकीचा वापर.

  1. Function मधून return.
is_up(){ curl -fs -o /dev/null "$1"; }; is_up https://example.com && echo up

Output:

up

याचा अर्थ: Function curl चा code देतं.

8. Retries आणि timeouts

हे का लागतं?

Networks क्षणभर जातात. Deploy ने failure म्हणण्याआधी health check काही वेळा try करावा, आणि कायम अडकू नये.

हे काय आहे?

Retry loop command N वेळा पर्यंत, मधे sleep देऊन चालवतो आणि शेवटी failure देतो. Busy server साठी प्रत्येक वेळी sleep दुप्पट करा (backoff). timeout 10 cmd, 10 seconds नंतर cmd मारतो आणि 124 देतो. Safe network steps साठी दोन्ही एकत्र.

कसं करायचं (step by step)

  1. Retry function.
retry(){ local n=$1 d=1 i; shift; for ((i=1;i<=n;i++)); do "$@" && return 0; echo "try $i failed" >&2; sleep $d; d=$((d*2)); done; return 1; }

याचा अर्थ: Backoff 1, 2, 4 seconds.

  1. वापरा.
retry 3 curl -fsS http://localhost:8080/health

Output:

try 1 failed
OK

याचा अर्थ: दुसरा try चालला.

  1. Timeout.
timeout 5 sleep 30; echo $?

Output:

124

याचा अर्थ: 124 = timed out.

  1. दोन्ही.
retry 3 timeout 10 pg_isready -h db1 || die 'database not ready'

Output:

db1:5432 - accepting connections

याचा अर्थ: Database साठी safe wait.

9. अनेक industries मधली खरी उदाहरणं

हे का लागतं?

तेच Linux skill प्रत्येक प्रकारच्या company मध्ये लागतं. वेगवेगळ्या ठिकाणी पाहिलं की लक्षात राहतं.

हे काय आहे?

प्रत्येक row म्हणजे एक काल्पनिक team. कोण हे वापरतं आणि कसं ते दाखवते.

कसं करायचं (step by step)

Team आणि शहरते कसं वापरतातCommand
Nikhil, logistics, PuneCSV download fail झाला तर route import थांबवाset -euo pipefail
Grace, hospital, NairobiLab-results sync fail झाला तर alertrsync -a src/ dst/ || alert
Hiro, manufacturing, OsakaDecimals सह average sensor tempawk '{s+=$1} END{print s/NR}'
Olivia, retail, SydneyPayment health check retryretry 5 curl -fs "$URL"
Ahmed, telecom, DubaiDisk percent alert(( used*100/total > 90 ))
Sneha, edtech, Bengaluruचुकीच्या arguments साठी usage errorexit 2

10. नेहमीच्या errors आणि त्यांचे fixes

हे का लागतं?

हे errors सगळ्यांना येतात. कारण माहीत असलं की तास वाचतात.

हे काय आहे?

आधी नेमका message वाचा. मग खालच्या row शी जुळवा.

कसं करायचं (step by step)

दिसणारा errorका होतंFix कसा करायचा
unbound variableset -u आणि var set नाहीSet करा किंवा default.
echo "${VAR:-}"
Script exits silently after ((n++))n 0, result 0, -e खाली exit 1n=$((n+1)) वापरा.
n=$((n+1))
value too great for base08 सारखं leading zero octal मानलंBase 10 force.
echo $((10#08))
syntax error: invalid arithmetic operator$(( )) मधे decimalbc किंवा awk.
echo '1.5+2' | bc
division by 0Divisor रिकामा किंवा शून्यभागण्याआधी check.
(( total > 0 )) && echo $((u*100/total))
Pipe failure not detectedpipefail नाहीEnable करा.
set -o pipefail
Script stops when grep finds nothing-e खाली grep 1 देतोAllow करा.
grep x f || true
bc: command not foundMinimal imagebc install किंवा awk.
sudo dnf install -y bc
Exit code 141SIGPIPE: pipefail सह reader लवकर बंदLong pipes वर head टाळा किंवा 141 ignore.
yes | head -1 || true

11. Troubleshooting step by step

हे का लागतं?

Script थांबते किंवा थांबत नाही तेव्हा कोणत्या command ने कोणता code दिला ते शोधा.

हे काय आहे?

वरून खाली जा. ज्या step ला problem दिसतो तिथे थांबा.

कसं करायचं (step by step)

  1. शेवटचा code.
echo $?
  1. Pipe codes.
echo "${PIPESTATUS[@]}"
  1. Trace.
bash -x script.sh
  1. Options.
echo $-; set -o | grep -E 'errexit|nounset|pipefail'
  1. Fail होणारी line.
trap 'echo "failed at line $LINENO" >&2' ERR
  1. Lint.
shellcheck script.sh

12. Lab 1: Maths आणि exit codes सह disk usage alert

हे का लागतं?

/ चा disk use वाचणारी आणि limit पेक्षा जास्त असेल तर message सह exit 1 करणारी diskcheck.sh लिहा, म्हणजे cron किंवा monitor action घेऊ शकतो.

हे काय आहे?

पूर्ण hands-on lab. प्रत्येक step test Linux machine वर करा (EC2 instance, VM किंवा WSL).

कसं करायचं (step by step)

  1. Script बनवा.
cat > ~/diskcheck.sh <<'X'
#!/usr/bin/env bash
set -euo pipefail
limit=${1:-85}
used=$(df --output=pcent / | tail -1 | tr -dc '0-9')
if (( used > limit )); then echo "disk / at ${used}% (limit ${limit}%)" >&2; exit 1; fi
echo "disk / ok at ${used}%"
X
chmod +x ~/diskcheck.sh
  1. चालवा.
~/diskcheck.sh; echo "rc=$?"

Output:

disk / ok at 41%
rc=0
  1. कमी limit.
~/diskcheck.sh 10; echo "rc=$?"

Output:

disk / at 41% (limit 10%)
rc=1
  1. Chain मधे.
~/diskcheck.sh 10 || echo 'send alert now'

Output:

disk / at 41% (limit 10%)
send alert now
  1. Lint.
shellcheck ~/diskcheck.sh && echo clean

Output:

clean

13. Lab 2: set -e आणि pipefail प्रत्यक्ष

हे का लागतं?

Safe header सह आणि शिवाय तीच छोटी script चालवून failures कसे बदलतात ते पहा.

हे काय आहे?

पूर्ण hands-on lab. प्रत्येक step test Linux machine वर करा (EC2 instance, VM किंवा WSL).

कसं करायचं (step by step)

  1. Unsafe script.
printf 'cat /nope | sort\necho "after: still running"\n' > ~/t.sh; bash ~/t.sh

Output:

cat: /nope: No such file or directory
after: still running
  1. Safe header.
sed -i '1i set -euo pipefail' ~/t.sh; bash ~/t.sh; echo "rc=$?"

Output:

cat: /nope: No such file or directory
rc=1
  1. Unset var.
bash -uc 'echo "$NOPE"'; echo "rc=$?"

Output:

bash: line 1: NOPE: unbound variable
rc=1
  1. Counter trap.
bash -ec 'n=0; ((n++)); echo reached'; echo "rc=$?"

Output:

rc=1
  1. Fixed counter.
bash -ec 'n=0; n=$((n+1)); echo reached $n'

Output:

reached 1
  1. Clean.
rm ~/t.sh

Ravindra Bagale's Tip

Start every new script with set -euo pipefail, send errors to stderr, and exit with a non-zero code on failure. Then learn the few places -e surprises you (counters, grep with no match, if conditions) so the safe header helps you instead of confusing you.

14. नेहमी विचारले जाणारे प्रश्न

प्र. 0 success का?

Success एकच, failure अनेक.

प्र. Max exit code?

255; मोठा wrap होतो.

प्र. set -e पुरेसं?

नाही; महत्त्वाच्या steps स्पष्ट check करा.

प्र. Bash मधे floating point?

नाही; bc किंवा awk.

प्र. let vs (( ))?

Same; (( )) clearer.

प्र. Function चा exit code?

शेवटचा command किंवा return N.

प्र. 124 का?

timeout ने command मारला.

प्र. एक failure ignore?

cmd || true.

15. मुलाखत प्रश्न आणि उत्तरं

Beginner level

प्र. Exit code 0?

Success.

प्र. शेवटचा code कुठे?

$?.

प्र. दोन numbers बेरीज?

$((a+b)).

प्र. a चाललं तरच b?

a && b.

Mid level level

प्र. pipefail काय करतो?

कोणताही भाग fail तर pipe fail.

प्र. Decimal maths?

bc किंवा awk.

प्र. Code 127?

Command not found.

प्र. Errors कुठे?

stderr, >&2.

Senior level

प्र. set -e कुठे चालत नाही?

if tests, && || lists आणि negated commands.

प्र. ((n++)) scripts का मारतो?

Result 0 म्हणजे -e खाली exit 1.

प्र. Retries design?

मर्यादित tries, backoff, timeout, clear final error.

प्र. Exit code 137?

Signal 9 ने killed, बहुदा OOM.

घरी करून बघा

  1. Price आणि rate घेऊन tax आणि total 2 decimals सह print करणारी GST calculator script लिहा.
  2. Website ला 3 वेळा ping करून मग down म्हणणारं retry function कोणत्याही script मधे जोडा.

सराव Tasks

या scenario बद्दल

Vidarbha Cotton Mills हा नागपूर मधला वस्त्रोद्योग व्यवसाय आहे. Ganesh Wankhede त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे INR मध्ये मोजले जातात आणि AWS resources ap-south-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.

0 / 21

सोपं बेरीज

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: Ganesh Wankhede कडे Vidarbha Cotton Mills मधे x आणि y आहेत. Arithmetic expansion ने बेरीज print करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं बाकी

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: n ला 7 ने भागून बाकी print करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं Increment

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: Double parens ने count एकने वाढवा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं शेवटचा exit code

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: exit= आणि नंतर आधीच्या command चा exit code print करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं Strict mode

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: long option names वापरून exit-on-error, unset-variable error आणि pipeline failure एकत्र on करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं OK असेल तर चालवा

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: make चालवा आणि success झालं तरच make install.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं Numbers compare

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: free 10 पेक्षा कमी आहे का double parens ने test करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं Exit code 3

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: Script exit status 3 ने संपवा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Power

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: Arithmetic expansion ने 2 चा power 10 print करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Decimal result

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: bc ने 22 भागिले 7, 2 decimals print करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम फक्त pipefail

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: एका छोट्या set मधे फक्त unset-variable आणि pipefail options on करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Or exit

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: /srv/app मधे जा, fail झालं तर exit 1.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Failure allow

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: set -e मधे grep -q ERROR app.log चालवा, match नसेल तरी script थांबू नये.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Test -ge

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: Double brackets ने n 5 पेक्षा मोठा किंवा बरोबर आहे का test करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Random 1-6

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: Dice सारखा 1 ते 6 random number print करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Negate

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: config.yml नसेल तरच missing print करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम let

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: let ने total = price गुणिले qty.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

अवघड Pipe statuses

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: शेवटच्या pipeline मधल्या प्रत्येक command चे exit codes print करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

अवघड ERR trap

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: कोणत्याही error वर failed at line आणि line number print करणारा trap set करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

अवघड Retry loop

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: curl -fs https://api.example.in 3 वेळा try करा, पहिल्या success ला थांबा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

अवघड Integer check

का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.

काय करायचं: Double brackets regex ने v मधे फक्त digits आहेत का test करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

थोडक्यात सांगायचं तर

  1. Integer maths साठी $(( )); decimals साठी bc/awk.
  2. 0 = success; $? लगेच वाचा.
  3. PIPESTATUS प्रत्येक pipe भाग दाखवतो.
  4. Success वर &&, failure वर ||.
  5. माहित traps सह set -euo pipefail.
  6. stderr ला die, backoff सह retry, timeout.

उजळणी, तुलना आणि मुलाखत cards

हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.

Strict mode. -e error वर थांबतो. -u unset vars वर fail. pipefail pipe errors पकडतो. Script च्या top ला.
उजळणी card: Strict mode · PNG download करा · Card page उघडा
Bash maths. $(( )) ने integers. (( )) ने compare. Decimals ला bc. Exit code $? मधे.
उजळणी card: Bash maths · PNG download करा · Card page उघडा
$(( )) vs bc. Built in integers. / Decimals सह calculator.
तुलना: $(( )) vs bc · PNG download करा · Card page उघडा
&& and or vs set -e. प्रत्येक command चा निर्णय. / पूर्ण script थांबते.
तुलना: && and or vs set -e · PNG download करा · Card page उघडा
set -e कुठे थांबत नाही?. if किंवा while tests मधे. && किंवा || च्या डावीकडे. Explicit checks जोडा.
मुलाखत card: set -e कुठे थांबत नाही? · PNG download करा · Card page उघडा
pipefail का?. Pipe status = शेवटची command. पहिली step fail लपते. सगळे दाखवा.
मुलाखत card: pipefail का? · PNG download करा · Card page उघडा
Common exit codes?. 0 ok, 1 error, 2 usage. 126 executable नाही, 127 सापडली नाही. 128+N signal N ने killed.
मुलाखत card: Common exit codes? · PNG download करा · Card page उघडा
bash मधे decimals?. $(( )) फक्त integer. bc किंवा awk. उदाहरण.
मुलाखत card: bash मधे decimals? · PNG download करा · Card page उघडा

अजून cards: Ravi Sir's Cards.