Ravindra BagaleCourses & study guides English

Shell Scripting Complete 7: Bash Arrays आणि Associative Arrays (declare -A) सोप्या भाषेत

Array म्हणजे अनेक values ठेवणारा एक variable: servers, files किंवा ports ची list. Associative array key-value pairs ठेवतो: server ते IP, user ते team, city ते PIN code. हा chapter indexed arrays, items add आणि remove करणं, safe loop, slices, file array मधे वाचायला mapfile, arrays ने command arguments बनवणं, आणि counting आणि lookups साठी declare -A सह associative arrays शिकवतो.

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

  • Indexed arrays बनवा आणि items वाचा
  • Items add, बदल आणि remove
  • "${arr[@]}" आणि indexes ने loop
  • mapfile ने files वाचा
  • Safe command arguments बनवा
  • Maps आणि counts साठी declare -A

1. रोजचं उदाहरण: डबा आणि phone book

हे का लागतं?

Stacked डब्याला numbered boxes असतात: box 0 भात, box 1 वरण, box 2 भाजी. 'box 1' मागितला की वरण मिळतं. हा indexed array. Phone book वेगळं: 'Ravi' शोधता आणि त्याचा number मिळतो. Number नाही, नाव वापरता. हा associative array.

हे काय आहे?

डबा = indexed array. Box number = index (0 पासून). Box मधलं अन्न = element. Boxes ची संख्या = ${#arr[@]}. Phone book = associative array. नाव = key. Phone number = value.

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

Array सोबत कसं काम करायचंबनवा: a=(x y z) किंवा declare -A mAdd: a+=(w) किंवा m[key]=valएक वाचा: ${a[1]} किंवा ${m[key]}Count: ${#a[@]}Loop: for v in "${a[@]}"Remove: unset 'a[1]'
नेहमी "${a[@]}" quote करा.

2. Indexed array बनवा

हे का लागतं?

Space-separated string spaces असलेल्या नावांवर तुटते. Array प्रत्येक item वेगळा आणि अख्खा ठेवतो.

हे काय आहे?

a=(one two 'three four') array बनवतो. Index 0 पासून. ${a[0]} पहिला item; ${a[-1]} शेवटचा (bash 4.3+). ${a[@]} सगळे items, ${#a[@]} count, ${!a[@]} indexes. साधा $a म्हणजे फक्त ${a[0]}. declare -p a सगळं दाखवतो.

प्रकारकाय देतो
${a[0]}पहिला item
${a[-1]}शेवटचा item
"${a[@]}"सगळे, प्रत्येक quoted
${#a[@]}count
${!a[@]}indexes
$a${a[0]} सारखं

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

  1. बनवा आणि वाचा.
cities=(Pune Mumbai 'Navi Mumbai'); echo "${cities[2]}"

Output:

Navi Mumbai

याचा अर्थ: Index 2 म्हणजे तिसरा item.

  1. Count आणि शेवटचा.
echo "${#cities[@]} cities, last is ${cities[-1]}"

Output:

3 cities, last is Navi Mumbai

याचा अर्थ: -1 शेवटून मोजतो.

  1. सगळं बघा.
declare -p cities

Output:

declare -a cities=([0]="Pune" [1]="Mumbai" [2]="Navi Mumbai")

याचा अर्थ: Index आणि value pairs.

  1. साधा $name trap.
echo $cities

Output:

Pune

याचा अर्थ: फक्त पहिला item.

3. Items add, बदल आणि remove

हे का लागतं?

Script चालताना lists वाढतात: failed hosts, upload करायच्या files, report करायचे errors.

हे काय आहे?

a+=(new) शेवटी जोडतो. a[5]=x index 5 set करतो (arrays मधे gaps असू शकतात). unset 'a[1]' item 1 काढतो पण gap राहतो; renumber साठी a=("${a[@]}"). a=() रिकामा करतो; unset a delete करतो. unset मधे 'a[1]' quote करा म्हणजे a1 नावाची file glob ला गोंधळवत नाही.

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

  1. Append.
failed=(); failed+=(web3); failed+=(db2); echo "${failed[@]}"

Output:

web3 db2

याचा अर्थ: += शेवटी जोडतो.

  1. बदला.
failed[0]=web4; echo "${failed[0]}"

Output:

web4

याचा अर्थ: Index ने assign.

  1. Remove आणि gap.
n=(a b c d); unset 'n[1]'; echo "${!n[@]}"

Output:

0 2 3

याचा अर्थ: Index 1 आता नाही.

  1. Renumber.
n=("${n[@]}"); echo "${!n[@]} -> ${n[*]}"

Output:

0 1 2 -> a c d

याचा अर्थ: Gaps शिवाय पुन्हा बनवलं.

4. Arrays वर safely loop

हे का लागतं?

बहुतेक array काम loop असतं. Spaces असलेली नावं टिकतात की नाही ते quoting ठरवतं.

हे काय आहे?

for v in "${a[@]}" प्रत्येक item अख्खा देतो. for i in "${!a[@]}" indexes देतो, position हवी असेल किंवा items बदलायचे असतील तर उपयोगी. "${a[*]}" IFS च्या पहिल्या char ने सगळे items एका string मधे जोडतो, print साठी सोपं: (IFS=,; echo "${a[*]}").

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

  1. प्रत्येक item.
files=('Q1 sales.csv' summary.csv); for f in "${files[@]}"; do echo "upload [$f]"; done

Output:

upload [Q1 sales.csv]
upload [summary.csv]

याचा अर्थ: Spaces राहिले.

  1. Unquoted तुटतं.
for f in ${files[@]}; do echo "[$f]"; done

Output:

[Q1]
[sales.csv]
[summary.csv]

याचा अर्थ: कधीही unquoted नको.

  1. Index सह.
for i in "${!files[@]}"; do echo "$((i+1)). ${files[i]}"; done

Output:

1. Q1 sales.csv
2. summary.csv

याचा अर्थ: Numbered list.

  1. Commas ने जोडा.
hosts=(web1 web2 db1); (IFS=,; echo "${hosts[*]}")

Output:

web1,web2,db1

याचा अर्थ: IFS बदल ( ) मधेच राहतो.

हे का लागतं?

Batch processing, 'पहिले 10' reports आणि membership तपासणं नेहमी लागतं.

हे काय आहे?

${a[@]:start:count} slice घेतो. ${#a[2]} item 2 ची length. ${a[@]/old/new} प्रत्येक item मधे replace. Value array मधे आहे का ते loop करून compare करा, किंवा associative array वापरा (मोठ्या lists साठी जलद).

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

  1. Slice.
nums=(10 20 30 40 50); echo "${nums[@]:1:3}"

Output:

20 30 40

याचा अर्थ: Index 1 पासून 3.

  1. 2 चे batches.
for ((i=0; i<${#nums[@]}; i+=2)); do echo "batch: ${nums[@]:i:2}"; done

Output:

batch: 10 20
batch: 30 40
batch: 50

याचा अर्थ: API limits साठी छान.

  1. सगळ्यांमधे replace.
imgs=(a.jpeg b.jpeg); echo "${imgs[@]/%.jpeg/.jpg}"

Output:

a.jpg b.jpg

याचा अर्थ: /% शेवटी match.

  1. आहे का?
in_list(){ local x=$1; shift; for v in "$@"; do [[ $v == "$x" ]] && return 0; done; return 1; }; in_list db1 web1 db1 && echo found

Output:

found

याचा अर्थ: "${a[@]}" arguments म्हणून द्या.

6. mapfile / readarray: file array मधे

हे का लागतं?

Hosts किंवा IDs ची list array मधे load केली की count, slice आणि अनेक वेळा loop करता येतं.

हे काय आहे?

mapfile -t arr < file प्रत्येक line एक item; -t new line काढतो. readarray हीच command. Command output साठी mapfile -t arr < <(cmd). -s 1 पहिली line (header) skip, -n 10 जास्तीत जास्त 10. एक line words मधे तोडायला read -ra arr <<< "$line".

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

  1. Lines items मधे.
printf 'web1\nweb2\ndb1\n' | tee servers.txt; mapfile -t srv < servers.txt; echo "${#srv[@]} servers: ${srv[*]}"

Output:

3 servers: web1 web2 db1

याचा अर्थ: प्रत्येक line एक item.

  1. Command मधून.
mapfile -t big < <(du -sh /var/* 2>/dev/null | sort -rh | head -3); printf '%s\n' "${big[@]}"

Output:

1.2G	/var/lib
800M	/var/log
40M	/var/cache

याचा अर्थ: Process substitution array ठेवतो.

  1. Header skip.
mapfile -t -s 1 rows < people.csv; echo "${rows[0]}"

Output:

1,Asha,Pune

याचा अर्थ: -s 1 ने header काढला.

  1. Line तोडा.
read -ra parts <<< 'mon tue wed'; echo "${parts[1]}"

Output:

tue

याचा अर्थ: -a array भरतो.

7. Arrays ने command arguments बनवा

हे का लागतं?

Options string मधे ठेवले तर spaces आणि quotes वर तुटतात. Optional flags बनवायचा arrays हाच बरोबर मार्ग.

हे काय आहे?

args=() ने सुरू करा आणि तुकडे जोडा: args+=(--exclude "$pat"). cmd "${args[@]}" ने चालवा. प्रत्येक element नेमका एक argument म्हणून जातो, म्हणून आतले spaces safe. Professional scripts rsync, curl आणि docker commands असेच बनवतात.

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

  1. String मार्ग तुटतो.
opts="-name 'my file.txt'"; find /tmp $opts

Output:

find: paths must precede expression: `file.txt''

याचा अर्थ: String मधले quotes खरे quotes नसतात.

  1. Array मार्ग चालतो.
opts=(-name 'my file.txt'); find /tmp "${opts[@]}"

Output:

/tmp/my file.txt

याचा अर्थ: प्रत्येक element एक argument.

  1. Optional flags.
verbose=1; args=(-a); (( verbose )) && args+=(-v); args+=(--exclude '*.tmp'); echo rsync "${args[@]}" src/ dst/

Output:

rsync -a -v --exclude *.tmp src/ dst/

याचा अर्थ: गरज असेल तेव्हाच flags.

  1. नेमके arguments.
printf '[%s]\n' "${args[@]}"

Output:

[-a]
[-v]
[--exclude]
[*.tmp]

याचा अर्थ: *.tmp एक argument राहिला.

8. Associative arrays: declare -A

हे का लागतं?

'या server चा IP कोणता' किंवा 'या user ची team कोणती' असे lookups numbers ऐवजी keys ने सोपे.

हे काय आहे?

declare -A m बनवतो (आवश्यक; bash 4+). m[key]=value set, ${m[key]} वाचतो, ${!m[@]} keys list, ${#m[@]} count. [[ -v m[key] ]] key आहे का तपासतो. Keys चा क्रम guaranteed नाही; print करताना sort करा. Quote केल्यास keys मधे spaces चालतात: m['Navi Mumbai']=400703.

कामSyntax
createdeclare -A m
setm[k]=v
get${m[k]}
keys${!m[@]}
exists?[[ -v m[k] ]]
delete keyunset 'm[k]'

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

  1. बनवा.
declare -A pin=([Pune]=411001 [Nashik]=422001 ['Navi Mumbai']=400703); echo "${pin[Nashik]}"

Output:

422001

याचा अर्थ: नावाने शोधा.

  1. Keys आणि values.
for c in "${!pin[@]}"; do echo "$c=${pin[$c]}"; done | sort

Output:

Nashik=422001
Navi Mumbai=400703
Pune=411001

याचा अर्थ: sort स्थिर क्रम देतो.

  1. आहे का?
[[ -v pin[Satara] ]] && echo yes || echo 'no Satara'

Output:

no Satara

याचा अर्थ: -v key तपासतो.

  1. declare -A विसरलात.
unset m; m[web]=1; m[db]=2; declare -p m

Output:

declare -a m=([0]="2")

याचा अर्थ: Indexed मानला; text keys 0 झाल्या.

9. Associative arrays ने counting आणि grouping

हे का लागतं?

'प्रत्येक service चे किती errors' किंवा 'प्रत्येक IP चे किती hits' हा रोजचा log प्रश्न.

हे काय आहे?

मोजायची गोष्ट key म्हणून आणि loop मधे ((count[$key]++)). शेवटी keys आणि counts print करा, sort -k2 -nr ने count प्रमाणे. Group पण: list[$team]+="$user ". फार मोठ्या files साठी awk जलद, पण medium data साठी हे स्पष्ट.

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

  1. Status प्रमाणे count.
declare -A hits; while read -r ip _ _ _ _ _ _ _ code _; do ((hits[$code]++)); done < access.log; for k in "${!hits[@]}"; do echo "$k ${hits[$k]}"; done | sort -k2 -nr

Output:

200 912
404 37
500 4

याचा अर्थ: Status code 9 वा field होता.

  1. Team प्रमाणे users.
declare -A team; while IFS=, read -r u t; do team[$t]+="$u "; done < <(printf 'meera,dev\nkunal,ops\nasha,dev\n'); for t in "${!team[@]}"; do echo "$t: ${team[$t]}"; done | sort

Output:

dev: meera asha 
ops: kunal 

याचा अर्थ: += text जोडतो.

  1. Unique items.
declare -A seen; for x in b a b c a; do seen[$x]=1; done; echo "${!seen[@]}" | tr ' ' '\n' | sort | tr '\n' ' '

Output:

a b c 

याचा अर्थ: Keys स्वभावतः unique.

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

हे का लागतं?

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

हे काय आहे?

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

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

Team आणि शहरते कसं वापरतातCommand
Aditi, e-commerce, PuneDeploy साठी server ते IP mapdeclare -A ip=([web1]=10.0.1.5)
Ben, broadcasting, LondonArray मधे rsync argsrsync "${args[@]}"
Min-jun, gaming, SeoulService नुसार errors((cnt[$svc]++))
Layla, airline, Cairomapfile ने host listmapfile -t hosts < hosts.txt
Mateo, fintech, Buenos AiresSlices मधे batch API calls${ids[@]:i:50}
Swapnil, insurance, NagpurFailures गोळा करून reportfailed+=("$h")

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

हे का लागतं?

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

हे काय आहे?

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

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

दिसणारा errorका होतंFix कसा करायचा
Only first item printed"${a[@]}" ऐवजी $a"${a[@]}" वापरा.
echo "${a[@]}"
Items with spaces splitUnquoted ${a[@]}Quote करा.
for x in "${a[@]}"
Text keys collapsed to [0]declare -A नाहीआधी declare.
declare -A m
declare: -A: invalid optionजुना bash 3 (macOS)bash 4+ install.
brew install bash
bad array subscriptरिकामी keyKey रिकामी नाही हे तपासा.
[[ -n $k ]] && m[$k]=1
Array empty after pipe | whileSubshell ने हरवला< <(cmd) किंवा mapfile.
mapfile -t a < <(cmd)
New line at end of every item-t शिवाय mapfile-t जोडा.
mapfile -t a < f
unbound variable with set -u on empty arrayजुना bash आणि रिकामा array${a[@]+"${a[@]}"} किंवा bash 4.4+.
echo ${a[@]+"${a[@]}"}
Arguments wrong when stored in a stringArray ऐवजी stringArray बनवा.
args=(-name "$n")

12. Troubleshooting step by step

हे का लागतं?

declare -p array मधे नेमकं काय आहे ते दाखवतो, type आणि indexes सह.

हे काय आहे?

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

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

  1. Dump.
declare -p a
  1. Count.
echo ${#a[@]}
  1. प्रत्येक item boxed.
printf '[%s]\n' "${a[@]}"
  1. Indexes.
echo "${!a[@]}"
  1. Bash version.
echo $BASH_VERSION
  1. Lint.
shellcheck s.sh

13. Lab 1: Arrays सह server inventory

हे का लागतं?

mapfile ने servers load करा, ping करा, failures array मधे गोळा करा आणि summary दाखवा.

हे काय आहे?

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

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

  1. Folder.
mkdir -p ~/lab43 && cd ~/lab43 && printf 'localhost\n127.0.0.1\nno.such.host\n' | tee inv.txt
  1. Load.
mapfile -t inv < inv.txt; echo "${#inv[@]} servers"

Output:

3 servers
  1. Check.
ok=(); bad=(); for h in "${inv[@]}"; do if ping -c1 -W1 "$h" &>/dev/null; then ok+=("$h"); else bad+=("$h"); fi; done
  1. Summary.
echo "up=${#ok[@]} down=${#bad[@]}"; printf 'DOWN: %s\n' "${bad[@]}"

Output:

up=2 down=1
DOWN: no.such.host
  1. Join.
(IFS=,; echo "up: ${ok[*]}")

Output:

up: localhost,127.0.0.1
  1. Inspect.
declare -p bad

Output:

declare -a bad=([0]="no.such.host")

14. Lab 2: declare -A ने key नुसार count

हे का लागतं?

System वर वापरलेले login shells मोजा आणि users ना shells शी map करा.

हे काय आहे?

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

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

  1. Declare.
declare -A cnt usr
  1. passwd वाचा.
while IFS=: read -r u _ _ _ _ _ sh; do ((cnt[$sh]++)); usr[$u]=$sh; done < /etc/passwd
  1. Counts.
for s in "${!cnt[@]}"; do echo "${cnt[$s]} $s"; done | sort -nr

Output:

22 /usr/sbin/nologin
3 /bin/bash
1 /bin/sync
  1. Lookup.
echo "root uses ${usr[root]}"

Output:

root uses /bin/bash
  1. आहे का?
[[ -v usr[nobody99] ]] || echo 'no such user'

Output:

no such user
  1. एकूण keys.
echo "${#usr[@]} users, ${#cnt[@]} shells"

Output:

26 users, 3 shells

Ravindra Bagale's Tip

Store lists in arrays, not in space-separated strings, and always expand them as "${arr[@]}". When you need lookups by name or counts, use declare -A and remember to declare it first.

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

प्र. Index कुठून?

0.

प्र. "${a[@]}" vs "${a[*]}"?

वेगळे items vs एक जोडलेली string.

प्र. Array sort?

mapfile -t s < <(printf '%s\n' "${a[@]}" | sort).

प्र. sh मधे arrays?

नाही; फक्त bash, zsh, ksh.

प्र. Function ला array?

"${a[@]}" किंवा nameref.

प्र. Array export?

शक्य नाही; file मधे लिहा.

प्र. Key क्रम?

Guaranteed नाही; sort.

प्र. 2D arrays?

m[row,col] सारख्या keys ने.

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

Beginner level

प्र. Array बनवायचा?

a=(x y z).

प्र. Items ची संख्या?

${#a[@]}.

प्र. Item add?

a+=(new).

प्र. पहिला item?

${a[0]}.

Mid level level

प्र. Safe loop?

for x in "${a[@]}".

प्र. File array मधे?

mapfile -t a < file.

प्र. Associative array?

declare -A m; m[k]=v.

प्र. Key तपासायची?

[[ -v m[k] ]].

Senior level

प्र. Commands arrays मधे का?

प्रत्येक element एक argument, spaces safe.

प्र. unset gaps; fix?

a=("${a[@]}").

प्र. Counting साठी arrays vs awk?

Medium data साठी arrays स्पष्ट; मोठ्या files साठी awk जलद.

प्र. Portability?

-A साठी bash 4+; macOS मधे bash 3.2.

घरी करून बघा

  1. तुमची पाच आवडती ठिकाणं array मधे ठेवा आणि numbered print करा, मग तिसरं काढून पुन्हा print करा.
  2. Home folder मधे प्रत्येक extension च्या किती files आहेत ते declare -A ने मोजा.

सराव Tasks

या scenario बद्दल

Nairobi Ride हा नैरोबी मधला वाहतूक व्यवसाय आहे. Wanjiru Kamau त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे KES मध्ये मोजले जातात आणि AWS resources af-south-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.

0 / 21

सोपं Array बनवा

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: east west north items सह zones array बनवा.

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

सोपं पहिला item

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: zones array चा पहिला item.

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

सोपं शेवटचा item

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: Negative index ने zones array चा शेवटचा item.

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

सोपं सगळे items

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: zones array चे सगळे items, प्रत्येक quoted.

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

सोपं Count

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: zones array मधे किती items.

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

सोपं Append

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: zones array च्या शेवटी south जोडा.

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

सोपं Inspect

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: zones array ची पूर्ण definition.

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

सोपं Map बनवा

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: stockqty नावाचा रिकामा associative array बनवा.

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

सोपं Key set

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: stockqty map मधे rice key 40.

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

मध्यम Indexes

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: zones array चे indexes.

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

मध्यम Index 3 set

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: zones array चा index 3 central करा.

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

मध्यम Item 1 काढा

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: zones array मधून index 1 काढा, element quote करून.

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

मध्यम Items loop

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: zones array वर loop, प्रत्येक item print, variable z.

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

मध्यम Slice

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: zones array मधे index 1 पासून 2 items.

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

मध्यम File array मधे

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: vendors.txt vend array मधे, प्रत्येक line एक item, new lines शिवाय.

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

मध्यम Keys list

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: stockqty map च्या सगळ्या keys.

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

मध्यम Key आहे

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: stockqty मधे dal key असेल तर yes.

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

अवघड Gaps बंद

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: zones array पुन्हा बनवा म्हणजे indexes मधे gaps नाहीत.

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

अवघड Pipe ने जोडा

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: Subshell मधे zones चे सगळे items | ने जोडून print.

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

अवघड Command array मधे

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: ls /etc/cron.d चा output jobs array मधे, new lines शिवाय.

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

अवघड Count वाढवा

का: BIZ servers, users आणि counts च्या lists arrays मधे ठेवतो.

काय करायचं: $code मधल्या key चा count hitsby map मधे एकने वाढवा.

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

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

  1. a=(x y) बनवतो; index 0 पासून.
  2. "${a[@]}" सगळे items, ${#a[@]} count, ${!a[@]} indexes.
  3. a+=(x) जोडतो; unset 'a[i]' काढतो.
  4. mapfile -t file load करतो.
  5. Command args arrays ने.
  6. Keys, lookups आणि counts साठी declare -A.

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

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

4 steps मधे Arrays. बनवा. एक item. Count. Loop.
उजळणी card: 4 steps मधे Arrays · PNG download करा · Card page उघडा
Associative arrays. आधी declare. Key set. Key वाचा. सगळ्या keys.
उजळणी card: Associative arrays · PNG download करा · Card page उघडा
indexed vs associative. 0, 1, 2 numbers. / नावाच्या keys.
तुलना: indexed vs associative · PNG download करा · Card page उघडा
mapfile vs while read. सगळ्या lines एकदम. / एक line एका वेळी.
तुलना: mapfile vs while read · PNG download करा · Card page उघडा
${a[@]} vs ${a[*]}?. "${a[@]}" items वेगळे. "${a[*]}" एक string. Safe loop.
मुलाखत card: ${a[@]} vs ${a[*]}? · PNG download करा · Card page उघडा
File lines array मधे?. mapfile सगळ्या lines वाचतो. -t newlines काढतो. उदाहरण.
मुलाखत card: File lines array मधे? · PNG download करा · Card page उघडा
फक्त bash ने words count?. declare -A counter. प्रत्येक word ला +1. Keys आणि values print.
मुलाखत card: फक्त bash ने words count? · PNG download करा · Card page उघडा
Mac वर declare -A fail?. macOS मधे bash 3.2. Associative arrays ला bash 4+. तपासा.
मुलाखत card: Mac वर declare -A fail? · PNG download करा · Card page उघडा

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