GNU/Linux >> Znalost Linux >  >> Linux

Výukový program Ultimate Bash Array s 15 příklady

Pole je proměnná obsahující více hodnot, které mohou být stejného typu nebo různého typu. Neexistuje žádné maximální omezení velikosti pole ani žádný požadavek, aby členské proměnné byly indexovány nebo přiřazeny souvisle. Index pole začíná nulou.

V tomto článku se podíváme na 15 různých operací s poli v bash.

Tento článek je součástí probíhající série Bash Tutorial. Pro ty, kteří začínají se skriptováním bash, začněte s výukovým programem Úvod do skriptování v bash.

1. Deklarace pole a přiřazení hodnot

V bash se pole vytvoří automaticky, když je použita proměnná ve formátu jako,

name[index]=value
  • název je libovolný název pole
  • index může být libovolné číslo nebo výraz, který musí být vyhodnocen jako číslo větší nebo rovné nule. Explicitní pole můžete deklarovat pomocí příkazu deklarovat -a název pole.
$ cat arraymanip.sh
#! /bin/bash
Unix[0]='Debian'
Unix[1]='Red hat'
Unix[2]='Ubuntu'
Unix[3]='Suse'

echo ${Unix[1]}

$./arraymanip.sh
Red hat

Pro přístup k prvku z pole použijte složené závorky jako ${name[index]}.

2. Inicializace pole během deklarace

Namísto inicializace každého prvku pole samostatně, můžete pole deklarovat a inicializovat zadáním seznamu prvků (oddělených mezerou) ve složených závorkách.

Syntax:
declare -a arrayname=(element1 element2 element3)

Pokud mají prvky mezeru, uzavřete ji do uvozovek.

#! /bin/bash
$cat arraymanip.sh
declare -a Unix=('Debian' 'Red hat' 'Red hat' 'Suse' 'Fedora');

deklarovat -a deklaruje pole a všechny prvky v závorkách jsou prvky pole.

3. Vytiskněte celé pole Bash

Existují různé způsoby, jak vytisknout celé prvky pole. Pokud je číslo indexu @ nebo *, odkazují se na všechny členy pole. Můžete procházet prvky pole a tisknout je pomocí cyklických příkazů v bash.

echo ${Unix[@]}

# Add the above echo statement into the arraymanip.sh
#./t.sh
Debian Red hat Ubuntu Suse

Odkazování na obsah členské proměnné pole bez uvedení čísla indexu je stejné jako odkazování na obsah prvního prvku, toho, na který se odkazuje s číslem indexu nula.

4. Délka pole Bash

Délku pole můžeme získat pomocí speciálního parametru $#.

${#arrayname[@]} vám udává délku pole.

$ cat arraymanip.sh
declare -a Unix=('Debian' 'Red hat' 'Suse' 'Fedora');
echo ${#Unix[@]} #Number of elements in the array
echo ${#Unix}  #Number of characters in the first element of the array.i.e Debian
$./arraymanip.sh
4
6

5. Délka n-tého prvku v poli

${#arrayname[n]} by měl udávat délku n-tého prvku v poli.

$cat arraymanip.sh
#! /bin/bash

Unix[0]='Debian'
Unix[1]='Red hat'
Unix[2]='Ubuntu'
Unix[3]='Suse'

echo ${#Unix[3]} # length of the element located at index 3 i.e Suse

$./arraymanip.sh
4

6. Extrakce podle offsetu a délky pro pole

Následující příklad ukazuje způsob, jak extrahovat 2 prvky počínaje pozicí 3 z pole nazvaného Unix.

$cat arraymanip.sh
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
echo ${Unix[@]:3:2}

$./arraymanip.sh
Suse Fedora

Výše uvedený příklad vrací prvky ve 3. indexu a čtvrtém indexu. Index vždy začíná nulou.

7. Extrakce s posunem a délkou pro konkrétní prvek pole

Chcete-li extrahovat pouze první čtyři prvky z prvku pole. Například Ubuntu, které se nachází na druhém indexu pole, můžete použít offset a délku pro konkrétní prvek pole.

$cat arraymanip.sh
#! /bin/bash

Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
echo ${Unix[2]:0:4}

./arraymanip.sh
Ubun

Výše uvedený příklad extrahuje první čtyři znaky z 2. indexovaného prvku pole.

8. Hledat a nahradit v prvcích pole

Následující příklad hledá Ubuntu v prvcích pole a nahradí je slovem „SCO Unix“.

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');

echo ${Unix[@]/Ubuntu/SCO Unix}

$./arraymanip.sh
Debian Red hat SCO Unix Suse Fedora UTS OpenLinux

V tomto příkladu nahradí prvek ve 2. indexu „Ubuntu“ za „SCO Unix“. Tento příklad však trvale nenahradí obsah pole.

9. Přidejte prvek do existujícího pole Bash

Následující příklad ukazuje způsob, jak přidat prvek do existujícího pole.

$cat arraymanip.sh
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Unix=("${Unix[@]}" "AIX" "HP-UX")
echo ${Unix[7]}

$./arraymanip.sh
AIX

V poli nazvaném Unix jsou prvky „AIX“ a „HP-UX“ přidány do 7. a 8. indexu.

10. Odebrat prvek z pole

unset se používá k odstranění prvku z pole.unset bude mít stejný účinek jako přiřazení null prvku.

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');

unset Unix[3]
echo ${Unix[3]}

Výše uvedený skript pouze vypíše hodnotu null, což je hodnota dostupná ve 3. indexu. Následující příklad ukazuje jeden ze způsobů, jak zcela odstranit prvek z pole.

$ cat arraymanip.sh
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
pos=3
Unix=(${Unix[@]:0:$pos} ${Unix[@]:$(($pos + 1))})
echo ${Unix[@]}

$./arraymanip.sh
Debian Red hat Ubuntu Fedora UTS OpenLinux

V tomto příkladu vám ${Unix[@]:0:$pos} poskytne 3 prvky začínající od 0. indexu, tj. 0,1,2 a ${Unix[@]:4} poskytne prvky od 4. indexu po poslední index. A sloučit oba výše uvedené výstupy. Toto je jedno z řešení odstranění prvku z pole.

11. Odeberte prvky Bash Array pomocí Patterns

Ve vyhledávací podmínce můžete zadat vzory a uložit zbývající prvek do jiného pole, jak je znázorněno níže.

$ cat arraymanip.sh
#!/bin/bash
declare -a Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora');
declare -a patter=( ${Unix[@]/Red*/} )
echo ${patter[@]}

$ ./arraymanip.sh
Debian Ubuntu Suse Fedora

Výše uvedený příklad odstraní prvky, které mají vzor Red*.

12. Kopírování pole

Rozbalte prvky pole a uložte je do nového pole, jak je znázorněno níže.

#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Linux=("${Unix[@]}")
echo ${Linux[@]}

$ ./arraymanip.sh
Debian Red hat Ubuntu Fedora UTS OpenLinux

13. Zřetězení dvou Bash Array

Rozbalte prvky dvou polí a přiřaďte je novému poli.

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh');

UnixShell=("${Unix[@]}" "${Shell[@]}")
echo ${UnixShell[@]}
echo ${#UnixShell[@]}

$ ./arraymanip.sh
Debian Red hat Ubuntu Suse Fedora UTS OpenLinux bash csh jsh rsh ksh rc tcsh
14

Vypíše pole, které obsahuje prvky pole „Unix“ i „Shell“ a počet prvků nového pole je 14.

14. Odstranění celého pole

unset se používá k odstranění celého pole.

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh');

UnixShell=("${Unix[@]}" "${Shell[@]}")
unset UnixShell
echo ${#UnixShell[@]}

$ ./arraymanip.sh
0

Po zrušení nastavení pole by jeho délka byla nula, jak je uvedeno výše.

15. Načíst obsah souboru do pole

Obsah souboru můžete načíst řádek po řádku do pole.

#Example file
$ cat logfile
Welcome
to
thegeekstuff
Linux
Unix

$ cat loadcontent.sh
#!/bin/bash
filecontent=( `cat "logfile" `)

for t in "${filecontent[@]}"
do
echo $t
done
echo "Read file content!"

$ ./loadcontent.sh
Welcome
to
thegeekstuff
Linux
Unix
Read file content!

Ve výše uvedeném příkladu se každý index prvku pole vytiskl přes smyčku for.

Doporučená četba

Bash 101 Hacks, od Rameshe Natarajan . Většinu času trávím v prostředí Linuxu. Takže jsem přirozeně velkým fanouškem Bash příkazového řádku a skriptování v shellu. Před 15 lety, když jsem pracoval na různých variantách *nix, jsem psal hodně kódu na C shellu a Korn shellu. Později, když jsem začal pracovat na Linuxu jako správce systému, jsem téměř automatizoval všechny možné úkoly pomocí skriptování v prostředí Bash. Na základě mých zkušeností s Bash jsem napsal e-knihu Bash 101 Hacks, která obsahuje 101 praktických příkladů jak pro příkazový řádek Bash, tak pro skriptování shellu. Pokud přemýšlíte o zvládnutí Bash, udělejte si laskavost a přečtěte si tuto knihu, která vám pomůže převzít kontrolu nad příkazovým řádkem Bash a skriptováním shellu.


Linux
  1. Numfmt Command Tutorial s příklady pro začátečníky

  2. Kurz příkazu typu s příklady pro začátečníky

  3. '&&' vs. '&' s příkazem 'test' v Bash

  1. Bash HereDoc výukový program s příklady

  2. Návod Shuf Command s příklady pro začátečníky

  3. Bash pole s příklady

  1. Výukový program pro skládání s příklady pro začátečníky

  2. Návod k příkazu df s příklady pro začátečníky

  3. Výukový program Top Command s příklady pro začátečníky