Shell Scripting Complete 5: for, while, until, while read आणि IFS सह Bash Loops
Loops मुळे script काम पुन्हा पुन्हा करतो: पन्नास servers तपासणं, हजार photos resize करणं, CSV ची प्रत्येक line वाचणं, किंवा service सुरू होईपर्यंत retry. हा chapter lists आणि files वर for, C-style for, while, until, break आणि continue, आणि खऱ्या scripts मधला सगळ्यात महत्त्वाचा loop: while IFS= read -r, जो file line by line वाचतो आणि fields safely तोडतो, हे शिकवतो. Pipe-subshell trap, process substitution, CSVs वाचणं आणि loops parallel चालवणंही शिकाल.
या chapter मध्ये तुम्ही काय शिकाल
- for ने lists, globs आणि ranges वर loop
- C-style for आणि while/until वापरा
- break आणि continue ने loops control
- while IFS= read -r ने files वाचा
- IFS ने CSV fields तोडा
- Pipe subshell trap टाळा
1. रोजचं उदाहरण: हजेरी घेणारे शिक्षक
हे का लागतं?
शिक्षक register उघडतात आणि नावा नावाने जातात: नाव वाचा, हाक मारा, P किंवा A, पुढचं, शेवटी थांबा. विद्यार्थी शाळा सोडून गेला असेल तर नाव skip. Bell वाजली तर लवकर थांबतात. हा नेमका continue आणि break सह while-read loop.
हे काय आहे?
Register = input file. एका line ला एक नाव = प्रत्येक loop ला एक line. Roll no, name, class columns = IFS ने तुटलेले fields. नाव skip = continue. Bell = break. Register संपलं = read false देतो.
कसं करायचं (step by step)
2. List वर for
हे का लागतं?
काही माहीत असलेल्या items साठी तीच command repeat करायचा सगळ्यात सोपा मार्ग: servers, users, environments.
हे काय आहे?
for name in item1 item2 item3; do ...; done. प्रत्येक loop ला name मधे पुढचा item. List words, "$@", *.csv सारखा glob, {1..5} brace range, किंवा $(command) असू शकते (सांभाळा: spaces वर तुटतं).
कसं करायचं (step by step)
- Words.
for env in dev stage prod; do echo "deploying to $env"; done
Output:
deploying to dev
deploying to stage
deploying to prod
याचा अर्थ: तीन items, तीन runs.
- Brace range.
for i in {1..3}; do echo "day $i"; done
Output:
day 1
day 2
day 3
याचा अर्थ: {1..3} 1 2 3 बनवतो.
- Step आणि zero pad.
echo {01..10..3}
Output:
01 04 07 10
याचा अर्थ: Start, end, step.
- Arguments.
set -- 'my file' other; for a in "$@"; do echo "[$a]"; done
Output:
[my file]
[other]
याचा अर्थ: "$@" spaces ठेवतो.
3. Globs ने files वर for
हे का लागतं?
Files वर bulk काम हा सगळ्यात common loop: rename, compress, convert, upload.
हे काय आहे?
for f in *.log spaces असलेली नावं बरोबर handle करतो ($(ls) वापरू नका). आत "$f" quote करा. काहीच match नसेल तर bash pattern स्वतःच ठेवतो (*.log); shopt -s nullglob जोडा म्हणजे loop शून्य वेळा चालतो. Sub-folders साठी shopt -s globstar आणि **/*.log, किंवा find.
कसं करायचं (step by step)
- Logs compress.
for f in /tmp/demo/*.log; do gzip -k "$f" && echo "zipped $f"; done
Output:
zipped /tmp/demo/app.log
zipped /tmp/demo/web server.log
याचा अर्थ: Space असलेलं नाव चालतं.
- काहीच match नाही.
for f in /tmp/none/*.csv; do echo "got $f"; done
Output:
got /tmp/none/*.csv
याचा अर्थ: Pattern स्वतःच आला.
- nullglob fix करतो.
shopt -s nullglob; for f in /tmp/none/*.csv; do echo "got $f"; done; echo done
Output:
done
याचा अर्थ: शून्य runs.
- Extensions बदला.
for f in *.jpeg; do mv -- "$f" "${f%.jpeg}.jpg"; done; ls
Output:
a.jpg b.jpg
याचा अर्थ: -- ने - ने सुरू होणारी नावं safe.
4. C-style for आणि seq
हे का लागतं?
Variable end सह counter लागतो (उदा. $n retries) तेव्हा brace ranges चालत नाहीत.
हे काय आहे?
for (( i=1; i<=n; i++ )); do ...; done C किंवा Java सारखं: start, condition, step. {1..$n} चालत नाही कारण braces variables आधी expand होतात. seq 1 $n पण चालतो आणि decimals आणि zero padding साठी -w.
कसं करायचं (step by step)
- Counter.
n=3; for (( i=1; i<=n; i++ )); do echo "try $i of $n"; done
Output:
try 1 of 3
try 2 of 3
try 3 of 3
याचा अर्थ: इथे variables चालतात.
- Braces fail.
n=3; echo {1..$n}
Output:
{1..3}
याचा अर्थ: Expand नाही.
- seq.
for i in $(seq -w 8 10); do echo "file_$i"; done
Output:
file_08
file_09
file_10
याचा अर्थ: -w समान width.
- Count down.
for (( i=3; i>0; i-- )); do echo $i; sleep 1; done; echo go
Output:
3
2
1
go
याचा अर्थ: i-- खाली जातो.
5. while आणि until
हे का लागतं?
कधी किती वेळा loop करायचं माहीत नसतं: port उघडेपर्यंत थांबा, download चालेपर्यंत retry.
हे काय आहे?
while COMMAND; do ...; done command 0 देते तोपर्यंत repeat. until COMMAND ती fail होते तोपर्यंत repeat (चालेपर्यंत). नेहमी बाहेर पडायचा मार्ग ठेवा: counter किंवा timeout, म्हणजे loop कायम चालणार नाही. while true; do ...; done हा endless loop जो break ने सोडता.
कसं करायचं (step by step)
- Port ची वाट.
tries=0; until nc -z localhost 8080 || (( ++tries > 5 )); do echo "waiting ($tries)"; sleep 2; done
Output:
waiting (1)
waiting (2)
याचा अर्थ: Port उघडला की किंवा 5 tries नंतर थांबतो.
- While counter.
n=1; while (( n <= 3 )); do echo "round $n"; ((n++)); done
Output:
round 1
round 2
round 3
याचा अर्थ: प्रत्येक वेळी condition तपासली.
- Download retry.
for i in 1 2 3; do curl -fsS -o /tmp/p.html https://example.com && break; echo "retry $i"; sleep 3; done; ls -l /tmp/p.html
Output:
-rw-r--r-- 1 asha asha 1256 Oct 25 /tmp/p.html
याचा अर्थ: Success वर break बाहेर.
- File वाढताना बघा.
while sleep 5; do wc -l < /var/log/syslog; done
Output:
3410
3415
याचा अर्थ: थांबवायला Ctrl+C.
6. break आणि continue
हे का लागतं?
खऱ्या data मधे skip करायच्या bad rows आणि लवकर थांबायचे क्षण असतात.
हे काय आहे?
continue या round चा उरलेला भाग skip करून पुढचा सुरू करतो. break loop पूर्ण सोडतो. Nested loops मधे break 2 आणि continue 2 बाहेरच्या loop वर.
कसं करायचं (step by step)
- Comments skip.
printf 'web1\n#old\nweb2\n' | while read -r h; do [[ $h == \#* ]] && continue; echo "ping $h"; done
Output:
ping web1
ping web2
याचा अर्थ: # ने सुरू lines skip.
- पहिल्या error ला थांबा.
for f in a.txt b.txt c.txt; do [[ -f $f ]] || { echo "missing $f, stopping"; break; }; echo "ok $f"; done
Output:
ok a.txt
missing b.txt, stopping
याचा अर्थ: break loop सोडतो.
- Nested break 2.
for r in 1 2; do for c in a b; do [[ $c == b ]] && break 2; echo $r$c; done; done
Output:
1a
याचा अर्थ: दोन्ही loops संपले.
7. while IFS= read -r: file line by line वाचा
हे का लागतं?
Host lists, user lists आणि exports line-based files असतात. त्या process करायचा हाच बरोबर, safe मार्ग. for line in $(cat file) प्रत्येक space वर तोडतो आणि चुकीचं आहे.
हे काय आहे?
while IFS= read -r line; do ...; done < file. IFS= सुरुवातीचे आणि शेवटचे spaces कापणं थांबवतो. -r backslash processing थांबवतो. शेवटचा < file loop ला देतो. शेवटच्या line ला new line नसेल तर || [[ -n $line ]] जोडा म्हणजे ती हरवत नाही. Body keyboard मधून वाचत असेल किंवा ssh चालवत असेल तर 3< file सह read -u 3.
कसं करायचं (step by step)
- Basic.
printf ' indented line\nC:\\path\n' | tee demo.txt; while IFS= read -r line; do echo "[$line]"; done < demo.txt
Output:
[ indented line]
[C:\path]
याचा अर्थ: Spaces आणि backslash राहिले.
- चुकीचा मार्ग.
for line in $(cat demo.txt); do echo "[$line]"; done
Output:
[indented]
[line]
[C:\path]
याचा अर्थ: Spaces वर तुटलं.
- New line नसलेली शेवटची line.
printf 'a\nb' | while IFS= read -r l || [[ -n $l ]]; do echo $l; done
Output:
a
b
याचा अर्थ: b हरवत नाही.
- ssh stdin खातो.
while read -r h; do ssh -n "$h" uptime; done < hosts.txt
Output:
web1: 10:00 up 3 days
web2: 10:00 up 9 days
याचा अर्थ: -n मुळे ssh list वाचत नाही.
8. IFS: fields तोडा (CSV, /etc/passwd)
हे का लागतं?
बहुतेक data मधे comma, colon किंवा tab ने वेगळे columns. read त्यांना नावाच्या variables मधे तोडू शकतो.
हे काय आहे?
IFS=, read -r a b c line comma वर a, b आणि c मधे तोडतो. शेवटच्या variable ला line चा उरलेला भाग. read आधी IFS set केलं तर फक्त त्या read साठी बदलतो. /etc/passwd साठी IFS=: आणि tab files साठी IFS=$'\t'. Fields मधे quoted commas असलेल्या CSV साठी खरं CSV tool (python, csvkit, mlr).
कसं करायचं (step by step)
- CSV.
printf 'id,name,city\n1,Asha,Pune\n2,Rohit,Satara\n' | tee people.csv; tail -n +2 people.csv | while IFS=, read -r id name city; do echo "$name lives in $city"; done
Output:
Asha lives in Pune
Rohit lives in Satara
याचा अर्थ: tail -n +2 header skip करतो.
- passwd.
while IFS=: read -r user _ uid _ _ home shell; do (( uid >= 1000 && uid < 65000 )) && echo "$user $home"; done < /etc/passwd
Output:
asha /home/asha
rohit /home/rohit
याचा अर्थ: _ columns टाकून देतो.
- Line चा उरलेला भाग.
IFS=: read -r a rest <<< 'one:two:three'; echo "$a | $rest"
Output:
one | two:three
याचा अर्थ: शेवटचा variable उरलेलं घेतो.
- Tab separated.
printf 'sku\tqty\nA1\t5\n' | while IFS=$'\t' read -r s q; do echo "$s=$q"; done
Output:
sku=qty
A1=5
याचा अर्थ: $'\t' म्हणजे tab.
9. Pipe subshell trap आणि process substitution
हे का लागतं?
फार common आश्चर्य: pipe ने भरलेल्या loop मधे count करता आणि नंतर count 0 असतो.
हे काय आहे?
cmd | while read ...; done मधे loop subshell मधे चालतो, म्हणून आत set केलेले variables done नंतर हरवतात. Fix 1: < file ने द्या. Fix 2: process substitution done < <(cmd). Fix 3: scripts मधे shopt -s lastpipe. Process substitution <(cmd) command ला file सारखं दाखवतं, diff <(a) <(b) साठीही उपयोगी.
कसं करायचं (step by step)
- Trap.
n=0; printf 'a\nb\nc\n' | while read -r x; do ((n++)); done; echo "count=$n"
Output:
count=0
याचा अर्थ: Loop चा n subshell मधे होता.
- Fix.
n=0; while read -r x; do ((n++)); done < <(printf 'a\nb\nc\n'); echo "count=$n"
Output:
count=3
याचा अर्थ: आता loop main shell मधे.
- दोन lists compare.
diff <(ls /etc | head -3) <(ls /etc | head -4)
Output:
3a4
> apt
याचा अर्थ: प्रत्येक command file सारखी.
10. Speed: parallel loops, wait आणि xargs -P
हे का लागतं?
200 servers एक एक तपासणं हळू. अनेक एकदम चालवले तर वेळ खूप कमी होतो.
हे काय आहे?
Loop मधे command नंतर & लावा म्हणजे background मधे चालते, मग loop नंतर सगळ्यांसाठी wait. एकत्र किती चालतात ते limit करा, उदा. xargs -P 8 ने किंवा प्रत्येक N jobs नंतर wait. प्रत्येक job चा output वेगळ्या file मधे म्हणजे lines मिसळत नाहीत.
कसं करायचं (step by step)
- Background आणि wait.
for h in web1 web2 web3; do ( ping -c1 -W1 "$h" &>/dev/null && echo "$h up" || echo "$h down" ) & done; wait; echo all done
Output:
web2 up
web1 up
web3 down
all done
याचा अर्थ: क्रम बदलतो; 'all done' आधी सगळे संपतात.
- xargs -P.
printf '%s\n' web{1..6} | xargs -P 3 -I{} sh -c 'sleep 1; echo {} checked'
Output:
web1 checked
web2 checked
web3 checked
web4 checked
web5 checked
web6 checked
याचा अर्थ: एकावेळी तीन, एकूण सुमारे 2 seconds.
- Time करा.
time (for i in 1 2 3; do sleep 1 & done; wait)
Output:
real 0m1.01s
याचा अर्थ: तीन 1-second jobs 1 second मधे.
11. अनेक industries मधली खरी उदाहरणं
हे का लागतं?
तेच Linux skill प्रत्येक प्रकारच्या company मध्ये लागतं. वेगवेगळ्या ठिकाणी पाहिलं की लक्षात राहतं.
हे काय आहे?
प्रत्येक row म्हणजे एक काल्पनिक team. कोण हे वापरतं आणि कसं ते दाखवते.
कसं करायचं (step by step)
| Team आणि शहर | ते कसं वापरतात | Command |
|---|---|---|
| Shruti, edtech, Pune | CSV मधून student folders | while IFS=, read -r id name; do mkdir -p "$id"; done |
| Noah, SaaS, Toronto | App आधी DB ची वाट | until pg_isready; do sleep 2; done |
| Priya, ad tech, Bengaluru | Parallel health checks | xargs -P 10 |
| Hans, automotive, Munich | Glob loop ने logs rotate | for f in *.log; do gzip "$f"; done |
| Aisha, govt portal, Nairobi | /etc/passwd मधून users | while IFS=: read -r u _ uid _ |
| Diego, retail, Madrid | API calls retry | for i in {1..5}; do curl -f ... && break; done |
12. नेहमीच्या errors आणि त्यांचे fixes
हे का लागतं?
हे errors सगळ्यांना येतात. कारण माहीत असलं की तास वाचतात.
हे काय आहे?
आधी नेमका message वाचा. मग खालच्या row शी जुळवा.
कसं करायचं (step by step)
| दिसणारा error | का होतं | Fix कसा करायचा |
|---|---|---|
Names with spaces split in the loop | for f in $(ls) वापरलं | Glob वापरा.for f in *; do |
Loop ran once with '*.csv' | Match नाही आणि nullglob नाही | nullglob चालू करा.shopt -s nullglob |
{1..$n} printed literally | Braces variables आधी | C-style for किंवा seq.for ((i=1;i<=n;i++)) |
Count is 0 after the loop | Pipe ने subshell | < <(cmd) वापरा.done < <(cmd) |
Last line of the file skipped | शेवटी new line नाही | || [[ -n $line ]] जोडा.while IFS= read -r l || [[ -n $l ]] |
Loop stopped after the first host | ssh ने उरलेला stdin वाचला | ssh -n वापरा.ssh -n "$h" cmd |
Leading spaces removed | IFS रिकामा नाही | IFS= वापरा.while IFS= read -r l |
Endless loop, CPU 100% | sleep आणि exit नाही | sleep आणि counter.sleep 2; (( ++t > 10 )) && break |
syntax error near unexpected token `done' | do नाही | do लिहा.for x in a; do echo $x; done |
13. Troubleshooting step by step
हे का लागतं?
Loop काम करण्याआधी प्रत्येक value दाखवू दे.
हे काय आहे?
वरून खाली जा. ज्या step ला problem दिसतो तिथे थांबा.
कसं करायचं (step by step)
- Items दाखवा.
for f in *.log; do printf '[%s]\n' "$f"; done
- वाचलेल्या lines.
wc -l < file
- CR characters.
grep -c $'\r' file
- CR काढा.
sed -i 's/\r$//' file
- एक round trace.
bash -x s.sh 2>&1 | head -40
- Lint.
shellcheck s.sh
14. Lab 1: CSV मधून users
हे का लागतं?
नवीन joiners चा CSV while IFS=, read -r ने वाचा, bad rows skip करा, आणि चालवायच्या commands print करा.
हे काय आहे?
पूर्ण hands-on lab. प्रत्येक step test Linux machine वर करा (EC2 instance, VM किंवा WSL).
कसं करायचं (step by step)
- Folder आणि data.
mkdir -p ~/lab41 && cd ~/lab41 && printf 'user,team,shell\nmeera,dev,bash\n#skip,me,bash\n,ops,bash\nkunal,ops,zsh\n' | tee joiners.csv
- Loop.
n=0; while IFS=, read -r u team sh; do [[ $u == \#* || -z $u ]] && continue; echo "useradd -m -s /bin/$sh -G $team $u"; ((n++)); done < <(tail -n +2 joiners.csv); echo "total $n"
Output:
useradd -m -s /bin/bash -G dev meera
useradd -m -s /bin/zsh -G ops kunal
total 2
- total का चालतं.
echo 'process substitution kept the loop in this shell'
Output:
process substitution kept the loop in this shell
- Windows line ends तपासा.
grep -c $'\r' joiners.csv
Output:
0
- Rows मोजा.
tail -n +2 joiners.csv | wc -l
Output:
4
- Lint.
echo 'run shellcheck on your script'
Output:
run shellcheck on your script
15. Lab 2: Retry आणि parallel check
हे का लागतं?
until ने retry loop लिहा, मग wait सह अनेक hosts parallel तपासा.
हे काय आहे?
पूर्ण hands-on lab. प्रत्येक step test Linux machine वर करा (EC2 instance, VM किंवा WSL).
कसं करायचं (step by step)
- Fake flaky command.
printf '#!/bin/bash\n(( RANDOM %% 3 == 0 ))\n' | tee flaky.sh && chmod +x flaky.sh
- Retry.
t=0; until ./flaky.sh; do ((t++)); echo "failed $t"; (( t >= 10 )) && break; sleep 1; done; echo "finished after $t failures"
Output:
failed 1
failed 2
finished after 2 failures
- Hosts file.
printf 'localhost\n127.0.0.1\nno.such.host\n' | tee hosts.txt
- Parallel.
while IFS= read -r h; do ( ping -c1 -W1 "$h" &>/dev/null && echo "$h up" || echo "$h down" ) & done < hosts.txt; wait
Output:
localhost up
127.0.0.1 up
no.such.host down
- Time करा.
time (while IFS= read -r h; do ping -c1 -W1 "$h" &>/dev/null & done < hosts.txt; wait)
Output:
real 0m1.02s
- xargs version.
xargs -P 3 -I{} ping -c1 -W1 {} < hosts.txt | grep -c 'bytes from'
Output:
2
Ravindra Bagale's Tip
For files use while IFS= read -r line; do ...; done < file. Never use for line in $(cat file). If you need variables after the loop, feed it with < <(command) instead of a pipe.
Ravindra Bagale's Tip – मराठी
Files साठी while IFS= read -r line; do ...; done < file वापरा. कधीही for line in $(cat file) नको. Loop नंतर variables लागत असतील तर pipe ऐवजी < <(command) ने द्या.
Ravindra Bagale's Tip – हिंदी
Files के लिए while IFS= read -r line; do ...; done < file इस्तेमाल कीजिए. कभी भी for line in $(cat file) नहीं. Loop के बाद variables चाहिए तो pipe की जगह < <(command) से दीजिए.
16. नेहमी विचारले जाणारे प्रश्न
प्र. for की while?
माहीत lists साठी for, files आणि conditions साठी while.
प्र. IFS= काय करतो?
सुरुवातीचे/शेवटचे spaces ठेवतो.
प्र. -r का?
Backslashes ठेवतो.
प्र. Sub-folders वर loop?
globstar ** किंवा read -d '' सह find -print0.
प्र. Loop नंतर variables हरवले?
Pipe subshell; < <(cmd).
प्र. Endless loop थांबवायचा?
Ctrl+C, आणि counter.
प्र. CSV मधे quoted commas?
CSV tool वापरा.
प्र. Parallel jobs limit?
xargs -P N किंवा wait -n.
17. मुलाखत प्रश्न आणि उत्तरं
Beginner level
प्र. 1 ते 5 loop?
for i in {1..5}.
प्र. एक round skip?
continue.
प्र. Loop सोडायचा?
break.
प्र. .txt files वर loop?
for f in *.txt.
Mid level level
प्र. File line by line?
while IFS= read -r l; do ...; done < f.
प्र. until vs while?
test fail होतो तोपर्यंत until.
प्र. CSV line तोडायची?
IFS=, read -r a b c.
प्र. for in $(cat) का नको?
Spaces, globs वर तुटतं.
Senior level
प्र. Pipe subshell problem?
प्रत्येक pipe भाग subshell; process substitution किंवा lastpipe.
प्र. New lines असलेली file names?
find -print0 | while IFS= read -r -d '' f.
प्र. 500 checks जलद पण safe?
Limit सह xargs -P, timeouts, per-job logs.
प्र. Hang न होणारा loop?
Commands वर timeouts आणि max retry counter.
घरी करून बघा
- /etc मधल्या प्रत्येक .conf file ची size du ने दाखवणारा loop लिहा, वाचता न येणाऱ्या skip करा.
- /etc/passwd IFS=: ने वाचा आणि ज्यांचा shell /bin/bash आहे ते users दाखवा.
सराव Tasks
Milan Furniture हा मिलान मधला फर्निचर व्यवसाय आहे. Giulia Rossi त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे EUR मध्ये मोजले जातात आणि AWS resources eu-south-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.
0 / 21
सोपं List loop
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: Pune Nashik Nagpur वर loop, प्रत्येक $c print.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं Brace range
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: Brace range वरच्या for loop ने 1 ते 7, variable i.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं Files loop
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: *.pdf वर loop, प्रत्येक file नाव quoted, variable f.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं Forever loop
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: दर 60 seconds कायम date print करणारा loop.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं Lines वाचा
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: pincodes.txt line by line safely line मधे वाचून प्रत्येक print.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं एका job ची वाट
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: bgpid मधे PID असलेल्या background job ची वाट.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम C-style
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: 0 पासून 4 पेक्षा कमी, variable k, print करणारा C-style for loop.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम seq padded
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: seq ने 1 ते 12 equal width.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम nullglob बंद
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: nullglob shell option बंद करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम While counter
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: x जास्तीत जास्त 3 असेपर्यंत चालणारा, x print आणि increment करणारा while loop.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Port पर्यंत
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: localhost वरचा port 5432 nc -z ला उत्तर देईपर्यंत loop, प्रत्येक वेळी 3 seconds sleep.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम CSV fields
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: vendors.csv commas वर id, name आणि gst मधे तोडून name print.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Colon fields
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: /etc/group colons वर g, pw आणि gid मधे तोडून g आणि gid print.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Blank lines skip
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: Read loop मधे line रिकामी असेल तर पुढच्या line ला जा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम STOP वर थांबा
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: Loop मधे w variable STOP ला equal झाल्यावर सोडा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
अवघड Globs मधे hidden files
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: * ला dot ने सुरू होणारी नावंही match करू देणारा shell option चालू करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
अवघड Count ठेवा
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: Process substitution वापरून ls output च्या lines n मधे मोजा म्हणजे n loop नंतर टिकेल.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
अवघड lastpipe
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: Pipe चा शेवटचा भाग current shell मधे चालवणारा option चालू करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
अवघड तीन सोडा
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: तीन nested loops एकदम सोडा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
अवघड एकावेळी चार
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: xargs ने hosts.txt मधला प्रत्येक host एकदा, चार parallel ping.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
अवघड Null-safe find loop
का: BIZ हजारो files आणि servers वर तेच काम चालवतो.
काय करायचं: media खालच्या प्रत्येक .mp4 वर find null separators सह loop, प्रत्येक print.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
18. संबंधित chapters
- DevOps साठी Linux Ops Refresh
- Automation साठी Bash Scripting
- Linux grep आणि find Commands Examples सह
- Linux Servers मध्ये Passwordless SSH
थोडक्यात सांगायचं तर
- for lists, globs आणि ranges.
- Variable end साठी for ((i=0;i
- while/until condition वर; नेहमी exit ठेवा.
- continue skip, break सोडतो.
- while IFS= read -r line; do ...; done < file safe वाचतो.
- Loop नंतर variables साठी < <(cmd).
उजळणी, तुलना आणि मुलाखत cards
हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.








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