Torna indietro   Hardware Upgrade Forum > Software > Linux, Unix, OS alternativi

Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Abbiamo provato per molti giorni il nuovo Z Fold7 di Samsung, un prodotto davvero interessante e costruito nei minimi dettagli. Rispetto al predecessore, cambiano parecchie cose, facendo un salto generazionale importante. Sarà lui il pieghevole di riferimento? Ecco la nostra recensione completa.
The Edge of Fate è Destiny 2.5. E questo è un problema
The Edge of Fate è Destiny 2.5. E questo è un problema
Bungie riesce a costruire una delle campagne più coinvolgenti della serie e introduce cambiamenti profondi al sistema di gioco, tra nuove stat e tier dell’equipaggiamento. Ma con risorse limitate e scelte discutibili, il vero salto evolutivo resta solo un’occasione mancata
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
AMD ha aggiornato l'offerta di CPU HEDT con i Ryzen Threadripper 9000 basati su architettura Zen 5. In questo articolo vediamo come si comportano i modelli con 64 e 32 core 9980X e 9970X. Venduti allo stesso prezzo dei predecessori e compatibili con il medesimo socket, le nuove proposte si candidano a essere ottimi compagni per chi è in cerca di potenza dei calcolo e tante linee PCI Express per workstation grafiche e destinate all'AI.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-04-2004, 15:38   #1
superchip
Senior Member
 
L'Avatar di superchip
 
Iscritto dal: Oct 2003
Messaggi: 1022
Esercizi in Linux

Un saluto a tutti!
Voglio partire col presupposto che di Linux non capisco una "l", quindi, non so dove mettere le mani in nessun posto. Dobbiamo fare due esercitazioni usando gli "shell-script" la prima traccia dice:
"Dato un file giornali contenente per ogni riga due colonne, titolo e copie vendute, a costruire un comando per fornire in output il numero copie di un titolo fornito dall'utente come argomento, oppure un messaggio di non trovato"
La seconda:
" Simulazione di un motore di ricerca: cercare in una directory i file che contengono una parola fornita, insieme al comando, dell'utente. Prima fornisce il numero dei file trovati, poi di ciascuno visualizza il nome e le prime cinque righe del file. controllare anche che l'utente fornisca una parola come argomento del comando.

Arrivato a questo punto, sono riuscito a finire il primo programma; però non funziona. Come posso risolvere questo problema? E per il secondo come devo fare? Quello che ho copiato sotto è il primo script, che nonostante i numerosi tentativi di correzione, non funziona. C'è qualcuno che saprebbe aiutarmi a riguardo?
Grazie 1000


#!bin/bash
declare nome
declare quantita
declare ok

ok=0
nome=$1
ok= grep nome giornali
if [ -z $ok ]
then
echo 'Rivista trovata'
quantita=$(grep $1 giornali | cut -f2)
echo $quantita
else
echo 'Rivista non trovata'
fi
__________________
Mac user
Utenti con cui ho felicemente trattato (come venditore): Sub_mariner, Wolftail, VIRGINBLACK, filippofab, Giankarlo, Francizio, alexmhr250, ciccillover, cardpi, Rei&Asuka, davelau, MyWay75, Don Peppone, Cippoleo
superchip è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2004, 17:31   #2
guldo76
Senior Member
 
L'Avatar di guldo76
 
Iscritto dal: Nov 2002
Città: Morio Cho
Messaggi: 2595
Cominciamo col primo.
Dal man test leggo:
-z STRING
the length of STRING is zero
quindi tu l'hai usato male, avresti dovuto invertire il then con l'else.
Poi non mi sembra che nessuna delle tre variabili dichiarate sia utile.
Non so come si faccia a programmare "per benino", non ho mai studiato su queste cose, cmq io avrei fatto cosi`:
Codice:
#!/bin/bash

if grep -q "$1" giornali
    then
    echo 'Rivista trovata'
    echo quantita=$(grep $1 giornali | cut -f2)
else
    echo 'Rivista non trovata'
fi
Nota queste cose:
  • l'opzione -q del grep
  • il percorso corretto di bash
Ah, cmq puoi anche usare le lettere accentate.

Guldo
guldo76 è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2004, 18:36   #3
superchip
Senior Member
 
L'Avatar di superchip
 
Iscritto dal: Oct 2003
Messaggi: 1022
Uoa!!! Funzi!!! mitico guldo!!!
Grazie mille!!
Per favore mi puoi dire che tipo di opzione è la grep -q?
Come mai nel codice dell'IF non hai inserito le parentesi quadre? è un nuovo tipo di sintassi? nel manuale che ho scaricato, ci sono le partentesi. E' un errore il mio?

Per il secondo esercizio, ho iniziato in questo modo:

#!/bin/bash
declare nome
declare nfilecartella
declare dir

nome=$1
while [ $1 ge 0 -a $1 le 9 ]
do
nome=$1
done

<<con questa parte di codice, mi sono assicurato che l'utente abbia inserito una parola e non un numero. Un problema in meno>>

Per cercare una parola all'interno del file, come si può fare??

dir=ls
nfilecartella=wc -c dir #sappiamo quanti file ci sono nella dir

e poi?
__________________
Mac user
Utenti con cui ho felicemente trattato (come venditore): Sub_mariner, Wolftail, VIRGINBLACK, filippofab, Giankarlo, Francizio, alexmhr250, ciccillover, cardpi, Rei&Asuka, davelau, MyWay75, Don Peppone, Cippoleo
superchip è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2004, 18:47   #4
lucifero666
Member
 
Iscritto dal: Feb 2003
Città: Bologna
Messaggi: 109
#!/bin/bash

result=$(grep $1 giornali)
if [[ ! -z $result ]]
then
echo 'Rivista trovata'
quantita=$(echo $result | cut -d" " -f2)
echo "Quantita' venduta:"
echo $quantita
else
echo 'Rivista non trovata'
exit 1
fi

exit 0


Allora, dovrebbe funzionare adesso;
ho considerato un file "giornali" dove le due colonne sono separate da uno spazio.
Ti dico quali erano i problemi:

1) quando assegni il risultato del grep alla variabile devi inserire quella operazione tra $( ) come facevi giustamente dopo nel caso di quantita

2) come ti avevano fatto notare nel tuo caso la condizione dell'if va' negata, oppure vanno scambiati i due rami. (cioe' se la stringa e' di lunghezza zero segnali che non hai trovato nulla, e viceversa)

3)Quando fai la cut devi stabilire anche il delimitatore nella stringa per poter selezionare un campo.
Lo puoi fare con l'opzione -d(delimitatore)
Nel tuo caso dato che le due colonne del file sono separate da uno spazio ho usato quello come delimitatore.

Ho tolto i declare perche' in questo caso non servivano...
il comando declare e' utile quando vuoi specificare particolari proprieta' della variabile.

Spero di esserti stato di aiuto.
Keep on scripting!
lucifero666 è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2004, 19:10   #5
guldo76
Senior Member
 
L'Avatar di guldo76
 
Iscritto dal: Nov 2002
Città: Morio Cho
Messaggi: 2595
Secondo esercizio

Io farei cosi`:
Codice:
#!/bin/bash

if [ $# = 0 ]; then echo "Voglio un argomento!"; exit 0; fi

j=0
for i in $(ls)
  do
  grep -q "$1" "$i" && j=$[$j+1]
done

echo "Ho trovato $j file(s)."

for i in $(ls .)
  do
  grep -q "$1" "$i" &&
  echo File: "$i" &&
  head -n 5 "$i"
done

exit 0
Pero` adesso basta.
Leggiti bene le pagine man di grep e test; poi magari guarda altrettanto bene i capitoli sulla bash degli "appunti" di daniele giacomini.

Buon scripting!

Guldo
guldo76 è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2004, 19:17   #6
guldo76
Senior Member
 
L'Avatar di guldo76
 
Iscritto dal: Nov 2002
Città: Morio Cho
Messaggi: 2595
Ah, dimenticavo, non saprei come controllare che l'utente inserisca una parola quando invoca lo script; il mio script si limita a controllare che l'utente inserisca almeno 1 argomento, il che significa che puo` inserirne anche piu` d'uno (ma saranno tutti ignorati tranne il primo), e che puo` inserire parole o numeri.
Del resto il tuo esempio (cmq sbagliato nella sintassi) si limitava a controllare che venisse inserito qualcosa compreso tra 0 e 9...

Guldo
guldo76 è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2004, 20:53   #7
superchip
Senior Member
 
L'Avatar di superchip
 
Iscritto dal: Oct 2003
Messaggi: 1022
Ok basta... non voglio essere invasivo! voglio imparare qualcosina!!!
Per esempio: cosa non andava nel mio primo script? in fondo è molto simile ai vostri... in uno dei miei Tentativi, ho provato modificare il comando ok sempre con le stesse istruzioni, e subito dopo ho fatto una echo di ok per vedere se al suo interno ci fosse qualcosa. Come mai la echo dava come risultato uno spazio? E poi non riesca a capire una cosa: perché Lucifero666 hai utilizzato le parentesi quadre mentre guldo no? che ruolo giocano le parentesi squadre nel test di Linux? poi giusto un'ultima curiosità: a cosa serve la exit che è presente nei due script?

Grazie ancora raga! siete due mostri!!!
__________________
Mac user
Utenti con cui ho felicemente trattato (come venditore): Sub_mariner, Wolftail, VIRGINBLACK, filippofab, Giankarlo, Francizio, alexmhr250, ciccillover, cardpi, Rei&Asuka, davelau, MyWay75, Don Peppone, Cippoleo
superchip è offline   Rispondi citando il messaggio o parte di esso
Old 22-04-2004, 10:07   #8
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Un link per rispondere alle tue domande:
http://tldp.org/LDP/abs/html/index.html
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 22-04-2004, 10:10   #9
lucifero666
Member
 
Iscritto dal: Feb 2003
Città: Bologna
Messaggi: 109
Allora, per quanto riguarda le parentesi quadre effettivamente in questo caso potevano non essere utilizzate; in generale esse sono un sinonimo per il comando "test" di linux, che non fa' altro che eseguire (testare) l'espressione che gli viene "assegnata".
In questo caso essendoci il costrutto if then else si poteva evitare di mettere la test.

oppure volendo non utilizzare il costrutto if then else avresti potuto scrivere una cosa del genere:
#!/bin/bash

result=$(grep $1 giornali)
[[ ! -z $result ]] && echo 'Rivista trovata' && echo "Quantita' venduta: $(echo $result | cut -d" " -f2) " && exit 0
echo "Rivista non trovata"
exit 1

Come vedi il codice e' piu' corto ma anche molto piu' criptico, in questo caso l'idea e' che viene eseguito il primo test, se questo va' bene (ovvero ritorna true) sara' eseguito il secondo comando, e cosi via a catena fino al comando di exit 0;
se il test tornera' false di conseguenza non verranno eseguiti tutti gli altri comandi, e si passera' direttamente al comando successivo di "rivista non trovata".

Come sinonimo della test posso utilizzare sia la singola "[" oppure come in questo caso
la doppia "[[" , questa scelta e' dovuta al fatto che alcuni operatori come "&&" o "||" vengono interpretati correttamente nel secondo caso, ma per tutto questo ti rimando al man della shell.


Per quanto riguarda gli exit l'utilizzo di questi dipende dal fatto che in unix, per convenzione, ogni comando (o script..) termina "ritornando" un exit status.
Ovvero, quando io eseguo un qualunque comando se questo termina correttamente mi tornera' come exit status 0, altrimenti un numero diverso da zero, che in generale corrisponde ad un particolare errore.
Questo ovviamente e' molto utile per controllare l'assenza di errori, quindi e' fortemente consigliato seguire questa convenzione.

Byez.!
lucifero666 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy Z Fold7: un grande salto generazionale Recensione Samsung Galaxy Z Fold7: un grande sal...
The Edge of Fate è Destiny 2.5. E questo è un problema The Edge of Fate è Destiny 2.5. E questo ...
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello Ryzen Threadripper 9980X e 9970X alla prova: AMD...
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale Acer TravelMate P4 14: tanta sostanza per l'uten...
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
Amazfit sempre più scontati: scen...
Norme e IA migliorano la postura di sicu...
Robot aspirapolvere Narwal ai minimi sto...
Incentivi per l'acquisto di auto elettri...
Radeon, stuttering con il ray tracing ne...
Kena Mobile finalmente ci siamo: eSIM in...
100.000 GPU NVIDIA in Norvegia: OpenAI a...
2 GoPro a prezzo stracciato: c'è ...
Blocco porno UK: la verifica dell'et&agr...
The Twisted Tale of Amanda Knox: il prim...
Samsung rallenta: utili in caduta libera...
'Il realismo ha rovinato i videogiochi' ...
Crollano anche i TV QLED Hisense: c'&egr...
Photoshop 2025: le nuove funzioni AI che...
Qualcomm cresce, ma la CPU per datacente...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:35.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v