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)
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)
- Totals बेरीज.
a=1200; b=850; echo $((a+b))
Output:
2050
याचा अर्थ: आत $ नको.
- Counter.
n=0; for f in *.log; do ((n++)); done; echo $n
Output:
3
याचा अर्थ: Files मोजतो.
- Percentage.
used=45; total=60; echo $((used*100/total))%
Output:
75%
याचा अर्थ: आधी गुणा, मग भागा.
- Compare.
disk=91; (( disk > 85 )) && echo 'disk alert'
Output:
disk alert
याचा अर्थ: (( )) test म्हणून.
- 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)
- Decimals सह भागाकार.
echo 'scale=2; 10/3' | bc
Output:
3.33
याचा अर्थ: scale=2.
- GST.
price=499.50; echo "scale=2; $price*1.18" | bc
Output:
589.41
याचा अर्थ: 18 percent जोडले.
- awk average.
printf '120\n95\n310\n' | awk '{s+=$1} END{printf "%.1f\n", s/NR}'
Output:
175.0
याचा अर्थ: Average response ms.
- 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 | अर्थ |
|---|---|
| 0 | success |
| 1 | general error |
| 2 | चुकीचा वापर |
| 126 | executable नाही |
| 127 | command सापडला नाही |
| 130 | Ctrl+C |
| 137 | signal 9 ने killed |
कसं करायचं (step by step)
- Success code.
ls /etc/hostname; echo $?
Output:
/etc/hostname
0
याचा अर्थ: 0 = OK.
- Failure code.
ls /nope; echo $?
Output:
ls: cannot access '/nope': No such file or directory
2
याचा अर्थ: 0 नाही.
- सापडला नाही.
nosuchcmd; echo $?
Output:
bash: nosuchcmd: command not found
127
याचा अर्थ: 127.
- Pipe codes.
false | true; echo "$? ${PIPESTATUS[@]}"
Output:
0 1 0
याचा अर्थ: शेवटचा true, पहिला fail.
- आधी 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)
- Success वरच.
mkdir -p /tmp/rel && cd /tmp/rel && pwd
Output:
/tmp/rel
याचा अर्थ: पहिल्या failure ला थांबतो.
- Failure वरच.
ping -c1 -W1 10.9.9.9 || echo 'gateway down'
Output:
gateway down
याचा अर्थ: Alert path.
- Command वर if.
if grep -q 'Out of memory' /var/log/syslog; then echo 'OOM seen'; fi
Output:
OOM seen
याचा अर्थ: $? नको.
- उलटं.
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 | परिणाम |
|---|---|
| -e | error वर exit |
| -u | unset variable error |
| -o pipefail | कोणताही भाग fail तर pipe fail |
| -x | प्रत्येक command trace |
कसं करायचं (step by step)
- Header.
#!/usr/bin/env bash
set -euo pipefail
याचा अर्थ: Script च्या पहिल्या lines.
- -u typos पकडतो.
set -u; echo "$DIRR"
Output:
bash: DIRR: unbound variable
याचा अर्थ: नुकसानाआधी थांबतो.
- pipefail.
set -o pipefail; false | sort; echo $?
Output:
1
याचा अर्थ: त्याशिवाय 0 मिळतो.
- Counter trap.
set -e; n=0; ((n++)); echo never
याचा अर्थ: Script exit; n=$((n+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)
- stderr ला.
echo 'config missing' >&2
Output:
config missing
याचा अर्थ: stdout मधे नाही.
- 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.
- Usage.
(( $# == 1 )) || { echo "usage: ${0##*/} ENV" >&2; exit 2; }
Output:
usage: deploy.sh ENV
याचा अर्थ: Exit 2 = चुकीचा वापर.
- 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)
- 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.
- वापरा.
retry 3 curl -fsS http://localhost:8080/health
Output:
try 1 failed
OK
याचा अर्थ: दुसरा try चालला.
- Timeout.
timeout 5 sleep 30; echo $?
Output:
124
याचा अर्थ: 124 = timed out.
- दोन्ही.
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, Pune | CSV download fail झाला तर route import थांबवा | set -euo pipefail |
| Grace, hospital, Nairobi | Lab-results sync fail झाला तर alert | rsync -a src/ dst/ || alert |
| Hiro, manufacturing, Osaka | Decimals सह average sensor temp | awk '{s+=$1} END{print s/NR}' |
| Olivia, retail, Sydney | Payment health check retry | retry 5 curl -fs "$URL" |
| Ahmed, telecom, Dubai | Disk percent alert | (( used*100/total > 90 )) |
| Sneha, edtech, Bengaluru | चुकीच्या arguments साठी usage error | exit 2 |
10. नेहमीच्या errors आणि त्यांचे fixes
हे का लागतं?
हे errors सगळ्यांना येतात. कारण माहीत असलं की तास वाचतात.
हे काय आहे?
आधी नेमका message वाचा. मग खालच्या row शी जुळवा.
कसं करायचं (step by step)
| दिसणारा error | का होतं | Fix कसा करायचा |
|---|---|---|
unbound variable | set -u आणि var set नाही | Set करा किंवा default.echo "${VAR:-}" |
Script exits silently after ((n++)) | n 0, result 0, -e खाली exit 1 | n=$((n+1)) वापरा.n=$((n+1)) |
value too great for base | 08 सारखं leading zero octal मानलं | Base 10 force.echo $((10#08)) |
syntax error: invalid arithmetic operator | $(( )) मधे decimal | bc किंवा awk.echo '1.5+2' | bc |
division by 0 | Divisor रिकामा किंवा शून्य | भागण्याआधी check.(( total > 0 )) && echo $((u*100/total)) |
Pipe failure not detected | pipefail नाही | Enable करा.set -o pipefail |
Script stops when grep finds nothing | -e खाली grep 1 देतो | Allow करा.grep x f || true |
bc: command not found | Minimal image | bc install किंवा awk.sudo dnf install -y bc |
Exit code 141 | SIGPIPE: pipefail सह reader लवकर बंद | Long pipes वर head टाळा किंवा 141 ignore.yes | head -1 || true |
11. Troubleshooting step by step
हे का लागतं?
Script थांबते किंवा थांबत नाही तेव्हा कोणत्या command ने कोणता code दिला ते शोधा.
हे काय आहे?
वरून खाली जा. ज्या step ला problem दिसतो तिथे थांबा.
कसं करायचं (step by step)
- शेवटचा code.
echo $?
- Pipe codes.
echo "${PIPESTATUS[@]}"
- Trace.
bash -x script.sh
- Options.
echo $-; set -o | grep -E 'errexit|nounset|pipefail'
- Fail होणारी line.
trap 'echo "failed at line $LINENO" >&2' ERR
- 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)
- 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
- चालवा.
~/diskcheck.sh; echo "rc=$?"
Output:
disk / ok at 41%
rc=0
- कमी limit.
~/diskcheck.sh 10; echo "rc=$?"
Output:
disk / at 41% (limit 10%)
rc=1
- Chain मधे.
~/diskcheck.sh 10 || echo 'send alert now'
Output:
disk / at 41% (limit 10%)
send alert now
- 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)
- 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
- 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
- Unset var.
bash -uc 'echo "$NOPE"'; echo "rc=$?"
Output:
bash: line 1: NOPE: unbound variable
rc=1
- Counter trap.
bash -ec 'n=0; ((n++)); echo reached'; echo "rc=$?"
Output:
rc=1
- Fixed counter.
bash -ec 'n=0; n=$((n+1)); echo reached $n'
Output:
reached 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.
Ravindra Bagale's Tip – मराठी
प्रत्येक नवी script set -euo pipefail ने सुरू करा, errors stderr ला पाठवा आणि failure वर non-zero code ने exit करा. मग -e जिथे आश्चर्य देतो त्या थोड्या जागा (counters, match नसलेला grep, if conditions) शिका म्हणजे safe header गोंधळ न करता मदत करतो.
Ravindra Bagale's Tip – हिंदी
हर नई script set -euo pipefail से शुरू कीजिए, errors stderr पर भेजिए और failure पर non-zero code से exit कीजिए. फिर -e जहाँ चौंकाता है वो कुछ जगहें (counters, बिना match का grep, if conditions) सीखिए ताकि safe header उलझाए नहीं, मदद करे.
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.
घरी करून बघा
- Price आणि rate घेऊन tax आणि total 2 decimals सह print करणारी GST calculator script लिहा.
- Website ला 3 वेळा ping करून मग down म्हणणारं retry function कोणत्याही script मधे जोडा.
सराव Tasks
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 करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं बाकी
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: n ला 7 ने भागून बाकी print करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं Increment
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: Double parens ने count एकने वाढवा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं शेवटचा exit code
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: exit= आणि नंतर आधीच्या command चा exit code print करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं Strict mode
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: long option names वापरून exit-on-error, unset-variable error आणि pipeline failure एकत्र on करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं OK असेल तर चालवा
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: make चालवा आणि success झालं तरच make install.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं Numbers compare
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: free 10 पेक्षा कमी आहे का double parens ने test करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं Exit code 3
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: Script exit status 3 ने संपवा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Power
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: Arithmetic expansion ने 2 चा power 10 print करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Decimal result
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: bc ने 22 भागिले 7, 2 decimals print करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम फक्त pipefail
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: एका छोट्या set मधे फक्त unset-variable आणि pipefail options on करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Or exit
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: /srv/app मधे जा, fail झालं तर exit 1.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Failure allow
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: set -e मधे grep -q ERROR app.log चालवा, match नसेल तरी script थांबू नये.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Test -ge
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: Double brackets ने n 5 पेक्षा मोठा किंवा बरोबर आहे का test करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Random 1-6
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: Dice सारखा 1 ते 6 random number print करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Negate
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: config.yml नसेल तरच missing print करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम let
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: let ने total = price गुणिले qty.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
अवघड Pipe statuses
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: शेवटच्या pipeline मधल्या प्रत्येक command चे exit codes print करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
अवघड ERR trap
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: कोणत्याही error वर failed at line आणि line number print करणारा trap set करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
अवघड Retry loop
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: curl -fs https://api.example.in 3 वेळा try करा, पहिल्या success ला थांबा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
अवघड Integer check
का: काही fail झालं तर BIZ चे jobs मोठ्याने थांबायला हवेत.
काय करायचं: Double brackets regex ने v मधे फक्त digits आहेत का test करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
16. संबंधित chapters
- DevOps साठी Linux Ops Refresh
- Automation साठी Bash Scripting
- Linux grep आणि find Commands Examples सह
- Linux Servers मध्ये Passwordless SSH
थोडक्यात सांगायचं तर
- Integer maths साठी $(( )); decimals साठी bc/awk.
- 0 = success; $? लगेच वाचा.
- PIPESTATUS प्रत्येक pipe भाग दाखवतो.
- Success वर &&, failure वर ||.
- माहित traps सह set -euo pipefail.
- stderr ला die, backoff सह retry, timeout.
उजळणी, तुलना आणि मुलाखत cards
हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.








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