Jump to content
Sign in to follow this  
Anonim

[Version 4] Utilizarea unui tablou pentru a stoca toate conturile de linii

Recommended Posts

Exemplul de mai jos folosește matricile shell pentru a stoca toate numele de fișiere ( file) și numărul său de linii ( line). Elementele dintr-un tablou sunt menționate folosind notația [] obișnuită, de exemplu, file[1]se referă la primul element din tablă file. Rețineți, faptul că bash acceptă numai matricile unidimensionale cu numere întregi ca indizări.

A se vedea secțiunea despre matrice în Bash-Scripting Ghid avansat: .


#! / Bin / bash
# Numărarea numărului de linii dintr-o listă de fișiere
# versiunea funcției

# funcție stocarea listei tuturor fișierelor în fișiere variabile
get_files () {
  files = "` ls *. [ch] `"
}

# funcție care numără numărul de linii dintr-un fișier
count_lines () {
  f = $ 1 # Primul argument este numele de fișier
  l = `wc -l $ f | sed 's / ^ \ ([0-9] * \). * $ / \ 1 /' '# număr de linii
}

# scriptul trebuie apelat fără argumente
dacă [$ # -gege 1]
atunci
  ecou „Utilizare: $ 0”
  iesirea 1
Fi

# împărțit de linia nouă
IFS = $ '\ 012'

ecou "$ 0 numără liniile de cod" 
# nu uitați să inițializați!
l = 0
n = 0
s = 0
# apelează la o funcție pentru a obține o listă de fișiere
get_files
# iterați peste această listă
pentru f în $ fișiere
do
        # apelează la o funcție pentru numărarea liniilor
        numără_line $ f
        ecou „$ f: $ l” loc
    # magazin nume de fișier într-un tablou
    fișier [$ n] = $ f
    # stocarea numărului de linii dintr-un tablou
    linii [$ n] = $ l
    # contor de creștere
        n = $ [$ n + 1]
    # suma crescută a tuturor liniilor
        s = $ [$ s + $ l]
Terminat

ecuați „$ n fișiere în total, cu $ s în linii în total”
i = 5
ecou "Fișierul $ i-a fost $ {fișier [$ i]} cu linii $ {linii [$ i]}"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  


×