GNU/Linux >> Znalost Linux >  >> Linux

Bash Beginner Series #4:Použití polí v Bash

Pole k záchraně!

Doposud jste ve svém bash skriptu používali omezený počet proměnných, vytvořili jste několik proměnných pro jeden nebo dva názvy souborů a uživatelská jména.

Ale co když potřebujete více než pár proměnných ve vašich bash skriptech; řekněme, že chcete vytvořit bash skript, který čte sto různých vstupů od uživatele, vytvoříte 100 proměnných?

Naštěstí to nemusíte, protože pole nabízejí mnohem lepší řešení.

Vytvoření prvního pole ve skriptu bash

Řekněme, že chcete vytvořit bash skript timestamp.sh který aktualizuje časové razítko pěti různých souborů.

Nejprve použijte naivní přístup k použití pěti různých proměnných:

#!/bin/bash

file1="f1.txt"
file2="f2.txt"
file3="f3.txt"
file4="f4.txt"
file5="f5.txt"

touch $file1
touch $file2
touch $file3
touch $file4
touch $file5

Nyní namísto použití pěti proměnných k uložení hodnoty pěti názvů souborů vytvoříte pole, které obsahuje všechny názvy souborů, zde je obecná syntaxe pole v bash:

array_name=(value1 value2 value3 … )

Nyní tedy můžete vytvořit pole s názvem soubory, které ukládá všech pět názvů souborů, které jste použili v timestamp.sh skript takto:

files=("f1.txt" "f2.txt" "f3.txt" "f4.txt" "f5.txt")

Jak vidíte, je to mnohem čistší a efektivnější, protože jste nahradili pět proměnných pouze jedním polem!

Přístup k prvkům pole v bash

První prvek pole začíná na indexu 0 a tak pro přístup k n-tému prvku pole použijete n -1 index.

Chcete-li například vytisknout hodnotu prvku 2 pole souborů, můžete použít následující příkaz echo:

echo ${files[1]}

a k vytištění hodnoty prvku 3 pole souborů můžete použít:

echo ${files[2]}

a tak dále.

Následující bash skript reverse.sh vytiskne všech pět hodnot v poli souborů v obráceném pořadí, počínaje posledním prvkem pole:

#!/bin/bash

files=("f1.txt" "f2.txt" "f3.txt" "f4.txt" "f5.txt")

echo ${files[4]}
echo ${files[3]}
echo ${files[2]}
echo ${files[1]}
echo ${files[0]}

Vím, že se možná divíte, proč tolik echo prohlášení a proč zde nepoužiji smyčku. Je to proto, že mám v úmyslu představit koncepty bashových smyček později v této sérii .

Můžete také vytisknout všechny prvky pole najednou:

echo ${files[*]}

f1.txt f2.txt f3.txt f4.txt f5.txt

Můžete vytisknout celkový počet prvků pole souborů, tj. velikost pole :

echo ${#files[@]}

5

Můžete také aktualizovat hodnotu libovolného prvku pole; například můžete změnit hodnotu prvního prvku pole souborů na „a.txt“ pomocí následujícího přiřazení:

files[0]="a.txt"

Přidání prvků pole v bash

Vytvořme pole, které obsahuje název populární distribuce Linuxu:

distros=("Ubuntu" "Red Hat" "Fedora")

Proud pole distros obsahuje tři prvky. Můžete použít += operátor pro přidání (připojení) prvku na konec pole.

Kali můžete například připojit k poli distros následovně:

distros+=("Kali")

Nyní pole distros obsahuje přesně čtyři prvky pole, přičemž Kali je posledním prvkem pole.

Odstranění prvků pole v bash

Nejprve vytvořte číselné pole, které bude ukládat čísla od 1 do 5:

num=(1 2 3 4 5)

Můžete vytisknout všechny hodnoty v poli num:

echo ${num[*]}

1 2 3 4 5

3prvek pole num můžete odstranit pomocí unset shell vestavěný:

unset num[2]

Pokud nyní vytisknete všechny hodnoty pole num:

echo ${num[*]}
1 2 4 5

Jak vidíte, třetí prvek pole num byl odstraněn.

Stejným způsobem můžete také smazat celé pole num:

unset num

Vytváření hybridních polí s různými datovými typy

V bash, na rozdíl od mnoha jiných programovacích jazyků, můžete vytvořit pole, které obsahuje různé datové typy. Podívejte se na následující user.sh bash skript:

#!/bin/bash

user=("john" 122 "sudo,developers" "bash")

echo "User Name: ${user[0]}"
echo "User ID: ${user[1]}"
echo "User Groups: ${user[2]}"
echo "User Shell: ${user[3]}"

Všimněte si, že uživatelské pole obsahuje čtyři prvky:

  1. "Jan" ----> Typ dat řetězce
  2. 122 --->  Celočíselný typ dat
  3. "sudo,developers" ---> Typ dat řetězce
  4. "bash" --->  Datový typ řetězce

Je tedy zcela v pořádku ukládat různé typy dat do stejného pole. Není to úžasné?

Tím se dostáváme na konec tohoto tutoriálu; Doufám, že sis to užil! Pokud chcete něco složitějšího a příkladu ze skutečného světa, podívejte se, jak rozdělit řetězce v bash pomocí polí.

A samozřejmě si můžete procvičit to, co jste se právě naučili, řešením problémů a odkazovat na jejich řešení, pokud uvíznete nebo potřebujete nápovědu.

Bash Kapitola 4 Cvičné otázkyProblémy a jejich řešení k procvičování Bashová poleBash-Chapter-4-Chaptice-Questions-Linux-Handbook.pdf29 KB

V další kapitole vám ukážu, jak používat různé aritmetické operátory bash.

Načítání...
Linux
  1. Jak vytvořit pole jedinečných prvků ze řetězce/pole v Bash?

  2. Bash Beginner Series #9:Použití funkcí v Bash

  3. Bash Beginner Series #8:Loops in Bash

  1. Použití odkazu na proměnnou bashového řetězce v Sed?

  2. Odstraňte mezery na každém začátku řádku souboru pomocí bash

  3. Chování polí ve skriptování bash a shellu zsh (počáteční index 0 nebo 1?)

  1. Bash Array Of Arrays?

  2. Bash pole s příklady

  3. Pole v Bash nenalezeno