esercitazioni bash

Linguaggi di programmazione: php, perl, python, C, bash, ecc.

esercitazioni bash

Messaggioda kaay90 » venerdì 8 febbraio 2019, 14:57

Salve. sono da poco entrato nel mondo bash e sto facendo delle piccole esercitazioni. ho un problema con questo progetto
#!/bin/bash
# vendite
somma=0
cont=0
declare media
for qta in `grep $1 $2 | cut -f2`
do
let somma+=qta
let cont+=1
done
let media=somma/cont
echo "media articolo $1 = $media"

quando avvio il terminale trovo questo errore:
progetto10: riga 11. let: media=somma/cont divisione per 0 (il token dell'errore è "cont")
non riesco a capire dove sbalio. grazie
kaay90
Prode Principiante
 
Messaggi: 6
Iscrizione: febbraio 2019
Sesso: Femminile

Re: esercitazioni bash

Messaggioda DoctorStrange » venerdì 8 febbraio 2019, 15:03

Prima di ogni cosa tutti sanno che non si può dividere per zero, e cont lo hai proprio inizializzato a zero.

oltre questo, tieni presente che bash è in grado di gestire solo cifre intere, quindi la divisione rischi di generare spesso errori inattesi. Dovrai servirti di una pipe con "bc". Almeno io faccio così.

Saluti.
Avatar utente
DoctorStrange
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1473
Iscrizione: ottobre 2015
Località: Roma, Italia
Desktop: Unity
Distribuzione: Ubuntu 16.04.03 Xenial Xerus
Sesso: Maschile

Re: esercitazioni bash

Messaggioda kaay90 » venerdì 8 febbraio 2019, 15:08

DoctorStrange Immagine ha scritto:Prima di ogni cosa tutti sanno che non si può dividere per zero, e cont lo hai proprio inizializzato a zero.

oltre questo, tieni presente che bash è in grado di gestire solo cifre intere, quindi la divisione rischi di generare spesso errori inattesi. Dovrai servirti di una pipe con "bc". Almeno io faccio così.

Saluti.



è un programma preso da un libro ed è scritto cosi. per quanto riguarda il pipe con bc non so proprio di cosa stai parlando :(
kaay90
Prode Principiante
 
Messaggi: 6
Iscrizione: febbraio 2019
Sesso: Femminile

Re: esercitazioni bash

Messaggioda DoctorStrange » venerdì 8 febbraio 2019, 15:12

Potresti cortesemente postare il riferimento dove hai preso il riferimento ad una divisione per zero? Comunque tanto per cominciare inizializza cont ad 1, e poi cambia la riga della divisione in questo modo:
Codice: Seleziona tutto
media=somma/cont | bc -l
e vedi se ottieni una lettura utile.
Avatar utente
DoctorStrange
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1473
Iscrizione: ottobre 2015
Località: Roma, Italia
Desktop: Unity
Distribuzione: Ubuntu 16.04.03 Xenial Xerus
Sesso: Maschile

Re: esercitazioni bash

Messaggioda kaay90 » venerdì 8 febbraio 2019, 15:22

DoctorStrange Immagine ha scritto:Potresti cortesemente postare il riferimento dove hai preso il riferimento ad una divisione per zero? Comunque tanto per cominciare inizializza cont ad 1, e poi cambia la riga della divisione in questo modo:
Codice: Seleziona tutto
media=somma/cont | bc -l
e vedi se ottieni una lettura utile.


il progetto che ho scritto prima è copiato da questo libro(sono delle slide).quando do il comando bash progetto10 15 / 3 il messaggio completo nel terminale è questo:
grep: / é una directory
progetto10: riga 11: let: media=somma/cont: divisione per 0 (il token dell'errore è "cont")
media articolo 20 =
kaay90
Prode Principiante
 
Messaggi: 6
Iscrizione: febbraio 2019
Sesso: Femminile

Re: esercitazioni bash

Messaggioda DoctorStrange » venerdì 8 febbraio 2019, 15:25

Ripeto: inizializza la variabile "cont" ad 1. Oppure ad un'altra costante.

Stai attento, hai messo degli spazi vuoti prima e dopo il simbolo di divisione. Rimuovili.
Avatar utente
DoctorStrange
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1473
Iscrizione: ottobre 2015
Località: Roma, Italia
Desktop: Unity
Distribuzione: Ubuntu 16.04.03 Xenial Xerus
Sesso: Maschile

Re: esercitazioni bash

Messaggioda kaay90 » venerdì 8 febbraio 2019, 15:31

DoctorStrange Immagine ha scritto:Ripeto: inizializza la variabile "cont" ad 1. Oppure ad un'altra costante.

Stai attento, hai messo degli spazi vuoti prima e dopo il simbolo di divisione. Rimuovili.

quando sono sul terminale se non metto gli spazi il programma non parte
kaay90
Prode Principiante
 
Messaggi: 6
Iscrizione: febbraio 2019
Sesso: Femminile

Re: esercitazioni bash

Messaggioda rai » venerdì 8 febbraio 2019, 15:58

Ciao kaay90, e benvenut* tanto per cominciare (hai messo sesso femminile ma ti declini al maschile :) )

Il primo problema che devi risolvere è che lo script che hai postato richiede di essere eseguito con due parametri: se tu scrivi
Codice: Seleziona tutto
progetto10 15 / 3

stai eseguendo lo script chiamato progetto10 con tre parametri: il 15 lo / e il 3
inoltre si capisce che lo script non si aspetta di avere passati due numeri come parametri.
$1 (che è il primo parametro) è il pattern che deve essere estratto da $2 (il secondo parametro, probabilmente un file multiriga)
Queste cose devi saperle tu leggendo la documentazione dell'esercizio

Questo è il motivo della divisione per zero: dato che la variabile qta resta nulla, il ciclo for non viene eseguito nemmeno una volta e quindi cont rimane sempre == 0

Le altre cose vengono dopo
rai
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 2226
Iscrizione: maggio 2008
Località: Palermo
Distribuzione: 16.04

Re: esercitazioni bash

Messaggioda kaay90 » venerdì 8 febbraio 2019, 16:09

rai Immagine ha scritto:Ciao kaay90, e benvenut* tanto per cominciare (hai messo sesso femminile ma ti declini al maschile :) )

Il primo problema che devi risolvere è che lo script che hai postato richiede di essere eseguito con due parametri: se tu scrivi
Codice: Seleziona tutto
progetto10 15 / 3

stai eseguendo lo script chiamato progetto10 con tre parametri: il 15 lo / e il 3
inoltre si capisce che lo script non si aspetta di avere passati due numeri come parametri.
$1 (che è il primo parametro) è il pattern che deve essere estratto da $2 (il secondo parametro, probabilmente un file multiriga)
Queste cose devi saperle tu leggendo la documentazione dell'esercizio

Questo è il motivo della divisione per zero: dato che la variabile qta resta nulla, il ciclo for non viene eseguito nemmeno una volta e quindi cont rimane sempre == 0

Le altre cose vengono dopo


ops ho sbagliato perchè mi sono registrato di corsa, cambio subito :muro:
se il comando bash progetto10 15 / 2 è sbagliato. che comando dovrei usare per fart partire solamente il programma10? (parlando anche in generale)
kaay90
Prode Principiante
 
Messaggi: 6
Iscrizione: febbraio 2019
Sesso: Femminile

Re: esercitazioni bash

Messaggioda rai » venerdì 8 febbraio 2019, 16:35

Quello script, per come è fatto _richiede_ i due parametri, altrimenti non funziona. Punto.
Volendo, dovresti creare un file di testo contenete delle righe da cui estrarre i numeri con cui incrementare la variabile somma.
Qualcosa del tipo
Codice: Seleziona tutto
102 34 56 78 12
23 485 12 67 89
23 45 00 32 12 987
1 22 345

prova mettere queste righe in un file e a passare il suo path come secondo parametro allo script. Esercizio: trova quali primi parametri si possono passare allo script per farlo funzionare.
Boh, magari anche questo faceva parte dell'esercizio?

Comunque adesso devo andare, se posso ci leggiamo qui stasera
rai
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 2226
Iscrizione: maggio 2008
Località: Palermo
Distribuzione: 16.04

Re: esercitazioni bash

Messaggioda UbuNuovo » venerdì 8 febbraio 2019, 19:05

Googolando l'ho trovato! https://www.edatlas.it/scarica/informat ... Linux5.pdf
PROGETTO 10
Esempi di shell script
Creare con l’editor un file contenente per ogni riga due campi, codice articolo e
quantità venduta
, separati dal carattere di tabulazione: ci possono essere vendite
diverse anche per lo stesso articolo. Costruire lo shell script che accetta come
argomenti il codice articolo e il nome del file
e restituisce la media della quantità
venduta dell’articolo richiesto.
Codice: Seleziona tutto
#!/bin/bash
# vendite
somma=0
cont=0
declare media
for qta in `grep $1 $2 | cut -f2`
do
  let somma+=qta
  let cont+=1
done
let media=somma/cont
echo "media articolo $1 = $media"

Per l’esecuzione occorre fornire, oltre al nome dello script, anche due argomenti: il codice
articolo prefissato e il nome del file che contiene i dati
; questi argomenti verranno associati
rispettivamente a $1 e $2 (variabili posizionali).


Ho messo in grassetto le parti importanti.
Nel caso in cui sia il primo a rispondere ad una richiesta di aiuto...chiunque abbia una soluzione migliore o anche solo diversa dalla mia è incoraggiato ad intervenire liberamente senza inviarmi alcun messaggio privato. In programmazione è basilare sapere che si può ottenere il medesimo risultato utilizzando metodi diversi.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 3216
Iscrizione: dicembre 2009
Desktop: Mate
Distribuzione: Ubuntu 14.04
Sesso: Maschile

Re: esercitazioni bash

Messaggioda rai » venerdì 8 febbraio 2019, 20:07

Heilà UbuNuovo :ciao:

Per l'appunto, CVD
rai
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 2226
Iscrizione: maggio 2008
Località: Palermo
Distribuzione: 16.04

Re: esercitazioni bash

Messaggioda UbuNuovo » venerdì 8 febbraio 2019, 20:36

Ciao @Rai
CVD == Come Volevasi Dimostrare
...Immagino :)
Nel caso in cui sia il primo a rispondere ad una richiesta di aiuto...chiunque abbia una soluzione migliore o anche solo diversa dalla mia è incoraggiato ad intervenire liberamente senza inviarmi alcun messaggio privato. In programmazione è basilare sapere che si può ottenere il medesimo risultato utilizzando metodi diversi.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 3216
Iscrizione: dicembre 2009
Desktop: Mate
Distribuzione: Ubuntu 14.04
Sesso: Maschile

Re: esercitazioni bash

Messaggioda kaay90 » martedì 12 febbraio 2019, 11:10

qualcuno mi potrebbe linkare una buona guida bash? grazie mille
kaay90
Prode Principiante
 
Messaggi: 6
Iscrizione: febbraio 2019
Sesso: Femminile

Re: esercitazioni bash

Messaggioda rai » giovedì 14 febbraio 2019, 14:36

Molti si sono formati su questo:
https://www.tldp.org/LDP/abs/abs-guide.pdf

Di cui c'è anche la versione navigabile

leggere, riscrivere e provare a modificare gli script di esempio è un ottimo esercizio
Buono studio
rai
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 2226
Iscrizione: maggio 2008
Località: Palermo
Distribuzione: 16.04


Torna a Programmazione

Chi c’è in linea

Visualizzano questa sezione: 0 utenti registrati e 5 ospiti