Ravindra BagaleCourses & study guides English

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)

while IFS= read -r कसं चालतं< file loop मधे file पाठवतोread एक line घेतोIFS fields मधे तोडतोत्या values सह body चालतेपुढच्या line साठी पुन्हाFile संपली की read fail आणि loop संपतो
-r backslashes ठेवतो; IFS= सुरुवातीचे spaces ठेवतो.

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)

  1. 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.

  1. Brace range.
for i in {1..3}; do echo "day $i"; done

Output:

day 1
day 2
day 3

याचा अर्थ: {1..3} 1 2 3 बनवतो.

  1. Step आणि zero pad.
echo {01..10..3}

Output:

01 04 07 10

याचा अर्थ: Start, end, step.

  1. 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)

  1. 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 असलेलं नाव चालतं.

  1. काहीच match नाही.
for f in /tmp/none/*.csv; do echo "got $f"; done

Output:

got /tmp/none/*.csv

याचा अर्थ: Pattern स्वतःच आला.

  1. nullglob fix करतो.
shopt -s nullglob; for f in /tmp/none/*.csv; do echo "got $f"; done; echo done

Output:

done

याचा अर्थ: शून्य runs.

  1. 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)

  1. 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 चालतात.

  1. Braces fail.
n=3; echo {1..$n}

Output:

{1..3}

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

  1. seq.
for i in $(seq -w 8 10); do echo "file_$i"; done

Output:

file_08
file_09
file_10

याचा अर्थ: -w समान width.

  1. 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)

  1. 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 नंतर थांबतो.

  1. While counter.
n=1; while (( n <= 3 )); do echo "round $n"; ((n++)); done

Output:

round 1
round 2
round 3

याचा अर्थ: प्रत्येक वेळी condition तपासली.

  1. 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 बाहेर.

  1. 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)

  1. 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.

  1. पहिल्या 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 सोडतो.

  1. 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)

  1. 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 राहिले.

  1. चुकीचा मार्ग.
for line in $(cat demo.txt); do echo "[$line]"; done

Output:

[indented]
[line]
[C:\path]

याचा अर्थ: Spaces वर तुटलं.

  1. New line नसलेली शेवटची line.
printf 'a\nb' | while IFS= read -r l || [[ -n $l ]]; do echo $l; done

Output:

a
b

याचा अर्थ: b हरवत नाही.

  1. 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)

  1. 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 करतो.

  1. 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 टाकून देतो.

  1. Line चा उरलेला भाग.
IFS=: read -r a rest <<< 'one:two:three'; echo "$a | $rest"

Output:

one | two:three

याचा अर्थ: शेवटचा variable उरलेलं घेतो.

  1. 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)

  1. Trap.
n=0; printf 'a\nb\nc\n' | while read -r x; do ((n++)); done; echo "count=$n"

Output:

count=0

याचा अर्थ: Loop चा n subshell मधे होता.

  1. Fix.
n=0; while read -r x; do ((n++)); done < <(printf 'a\nb\nc\n'); echo "count=$n"

Output:

count=3

याचा अर्थ: आता loop main shell मधे.

  1. दोन 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)

  1. 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' आधी सगळे संपतात.

  1. 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.

  1. 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, PuneCSV मधून student folderswhile IFS=, read -r id name; do mkdir -p "$id"; done
Noah, SaaS, TorontoApp आधी DB ची वाटuntil pg_isready; do sleep 2; done
Priya, ad tech, BengaluruParallel health checksxargs -P 10
Hans, automotive, MunichGlob loop ने logs rotatefor f in *.log; do gzip "$f"; done
Aisha, govt portal, Nairobi/etc/passwd मधून userswhile IFS=: read -r u _ uid _
Diego, retail, MadridAPI calls retryfor 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 loopfor f in $(ls) वापरलंGlob वापरा.
for f in *; do
Loop ran once with '*.csv'Match नाही आणि nullglob नाहीnullglob चालू करा.
shopt -s nullglob
{1..$n} printed literallyBraces variables आधीC-style for किंवा seq.
for ((i=1;i<=n;i++))
Count is 0 after the loopPipe ने 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 hostssh ने उरलेला stdin वाचलाssh -n वापरा.
ssh -n "$h" cmd
Leading spaces removedIFS रिकामा नाही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)

  1. Items दाखवा.
for f in *.log; do printf '[%s]\n' "$f"; done
  1. वाचलेल्या lines.
wc -l < file
  1. CR characters.
grep -c $'\r' file
  1. CR काढा.
sed -i 's/\r$//' file
  1. एक round trace.
bash -x s.sh 2>&1 | head -40
  1. 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)

  1. 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
  1. 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
  1. total का चालतं.
echo 'process substitution kept the loop in this shell'

Output:

process substitution kept the loop in this shell
  1. Windows line ends तपासा.
grep -c $'\r' joiners.csv

Output:

0
  1. Rows मोजा.
tail -n +2 joiners.csv | wc -l

Output:

4
  1. 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)

  1. Fake flaky command.
printf '#!/bin/bash\n(( RANDOM %% 3 == 0 ))\n' | tee flaky.sh && chmod +x flaky.sh
  1. 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
  1. Hosts file.
printf 'localhost\n127.0.0.1\nno.such.host\n' | tee hosts.txt
  1. 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
  1. Time करा.
time (while IFS= read -r h; do ping -c1 -W1 "$h" &>/dev/null & done < hosts.txt; wait)

Output:

real 0m1.02s
  1. 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.

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.

घरी करून बघा

  1. /etc मधल्या प्रत्येक .conf file ची size du ने दाखवणारा loop लिहा, वाचता न येणाऱ्या skip करा.
  2. /etc/passwd IFS=: ने वाचा आणि ज्यांचा shell /bin/bash आहे ते users दाखवा.

सराव Tasks

या scenario बद्दल

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.

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

सोपं Brace range

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: Brace range वरच्या for loop ने 1 ते 7, variable i.

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

सोपं Files loop

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: *.pdf वर loop, प्रत्येक file नाव quoted, variable f.

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

सोपं Forever loop

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: दर 60 seconds कायम date print करणारा loop.

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

सोपं Lines वाचा

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: pincodes.txt line by line safely line मधे वाचून प्रत्येक print.

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

सोपं एका job ची वाट

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: bgpid मधे PID असलेल्या background job ची वाट.

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

मध्यम C-style

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: 0 पासून 4 पेक्षा कमी, variable k, print करणारा C-style for loop.

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

मध्यम seq padded

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: seq ने 1 ते 12 equal width.

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

मध्यम nullglob बंद

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: nullglob shell option बंद करा.

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

मध्यम While counter

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: x जास्तीत जास्त 3 असेपर्यंत चालणारा, x print आणि increment करणारा while loop.

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

मध्यम Port पर्यंत

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: localhost वरचा port 5432 nc -z ला उत्तर देईपर्यंत loop, प्रत्येक वेळी 3 seconds sleep.

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

मध्यम CSV fields

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: vendors.csv commas वर id, name आणि gst मधे तोडून name print.

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

मध्यम Colon fields

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: /etc/group colons वर g, pw आणि gid मधे तोडून g आणि gid print.

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

मध्यम Blank lines skip

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: Read loop मधे line रिकामी असेल तर पुढच्या line ला जा.

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

मध्यम STOP वर थांबा

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: Loop मधे w variable STOP ला equal झाल्यावर सोडा.

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

अवघड Globs मधे hidden files

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: * ला dot ने सुरू होणारी नावंही match करू देणारा shell option चालू करा.

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

अवघड Count ठेवा

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: Process substitution वापरून ls output च्या lines n मधे मोजा म्हणजे n loop नंतर टिकेल.

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

अवघड lastpipe

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: Pipe चा शेवटचा भाग current shell मधे चालवणारा option चालू करा.

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

अवघड तीन सोडा

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: तीन nested loops एकदम सोडा.

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

अवघड एकावेळी चार

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: xargs ने hosts.txt मधला प्रत्येक host एकदा, चार parallel ping.

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

अवघड Null-safe find loop

का: BIZ हजारो files आणि servers वर तेच काम चालवतो.

काय करायचं: media खालच्या प्रत्येक .mp4 वर find null separators सह loop, प्रत्येक print.

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

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

  1. for lists, globs आणि ranges.
  2. Variable end साठी for ((i=0;i
  3. while/until condition वर; नेहमी exit ठेवा.
  4. continue skip, break सोडतो.
  5. while IFS= read -r line; do ...; done < file safe वाचतो.
  6. Loop नंतर variables साठी < <(cmd).

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

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

for loop प्रकार. List वर. Files वर. Range वर. C style.
उजळणी card: for loop प्रकार · PNG download करा · Card page उघडा
File line by line वाचा. while read वापरा. IFS= spaces ठेवतो. -r backslashes ठेवतो. Pattern.
उजळणी card: File line by line वाचा · PNG download करा · Card page उघडा
for vs while. माहीत असलेल्या list वर. / Test fail होईपर्यंत.
तुलना: for vs while · PNG download करा · Card page उघडा
while vs until. Test true असेपर्यंत. / Test false असेपर्यंत.
तुलना: while vs until · PNG download करा · Card page उघडा
नावातल्या spaces ने loop तुटतो?. ls output वर loop नको. Glob वापरा, "$f" quote. Safe.
मुलाखत card: नावातल्या spaces ने loop तुटतो? · PNG download करा · Card page उघडा
Pipe loop नंतर variable गेला?. Pipe loop subshell मधे चालवतो. File किंवा < <( ) मधून वाचा. उदाहरण.
मुलाखत card: Pipe loop नंतर variable गेला? · PNG download करा · Card page उघडा
break vs continue?. break loop सोडतो. continue पुढच्या round ला. Nested.
मुलाखत card: break vs continue? · PNG download करा · Card page उघडा
Loop jobs parallel?. & ने background. सगळे संपेपर्यंत wait. मग.
मुलाखत card: Loop jobs parallel? · PNG download करा · Card page उघडा

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