Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    while

    Ciao a tutti.

    Devo fare in bash un ciclo che esca solo se un file ha dimensione maggiore di un certo numero.

    Ho scritto questo:


    COUNTER=0
    while [ $COUNTER -lt 200000 ];

    do

    COUNTER =$ (globusrun.bat -o -r grid-00.netlab.it '&(executable=/usr/bin/stat)(arguments= -c%s /home/globus/tesi/19.sep)')


    done


    p.s. la chiamata globusrun.bat -o -r grid-00.netlab.it '&(executable=/usr/bin/stat)(arguments= -c%s /home/globus/tesi/19.sep)' funziona correttamente e restituisce la dimensione del file che io gli passo.

    Credo di aver sbagliato nell'assegnazione del valore counter ma non capisco cosa fare.

    Grazie.

    Alessandro

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Moderazione

    Un titolo più significativo di "while" sarebbe meglio, come da Regolamento.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: while

    Originariamente inviato da aganallove
    Devo fare in bash un ciclo che esca solo se un file ha dimensione maggiore di un certo numero.
    Ecco un esempio:
    codice:
    while true; do
        SIZE=$(stat -c%s nomefile)
    
        if [ $SIZE -gt 10000 ]; then
            break
        fi
    
        sleep 1
    done
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4

    Errore in ciclo annidato

    Ciao a tutti.

    Devo fare un for su una variabile la quale entra in un ciclo while fino a quando il file che cerco non è presente e di dimensione superiore a 13000.

    Non capisco se il problema è nel for e while annidati male o semplicemente nella chiamata della variabile.

    Allego il codice.

    for k in `seq 0 14`;
    do

    while true; do
    SIZE=$(globusrun.bat -o -r grid-00.netlab.it '&(executable=/usr/bin/stat)(arguments= -c%s /home/globus/tesi/"$k"_file.sep)')

    if [ $SIZE -gt 13000 ]; then
    break
    fi

    sleep 1
    done
    echo "il file "$k"_file è presente."

    done

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Moderazione

    Ho unito la discussione alla precedente, in quanto si tratta sempre dello stesso problema da risolvere.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: Errore in ciclo annidato

    Originariamente inviato da aganallove
    codice:
    for k in `seq 0 14`;
    do
    
    while true; do
        SIZE=$(globusrun.bat -o -r grid-00.netlab.it '&(executable=/usr/bin/stat)(arguments= -c%s /home/globus/tesi/"$k"_file.sep)')
    
        if [ $SIZE -gt 13000 ]; then
            break
        fi
    
        sleep 1
    done
    echo "il file "$k"_file è presente."
    
    done
    Come sintassi mi sembra giusto. Non capisco solo bene quello che hai messo dentro SIZE=$(.....) ma credo che sia "roba tua".
    L'unico appunto che posso fare è che se il file che testi non esiste, ottieni sullo standard error la stampa di un errore da parte di stat e SIZE è quindi vuoto. Questo causerebbe l'errore nel if. Quindi è meglio testare l'esistenza del file o comunque se $SIZE è vuoto o no.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Il programma escluso il for funzinava, ovvero testava l'esistenza di un unico file.
    Ho voluto ripetere lo stesso controllo per tutti i file per cui ho aggiunto un for e ho inserito la variabile prima del file da cercare.

    La dichiarazione della variabile è giusta?

    questo funziona:

    while true; do
    SIZE=$(globusrun.bat -o -r grid-00.netlab.it '&(executable=/usr/bin/stat)(arguments= -c%s /home/globus/tesi/49_file.sep)')

    if [ $SIZE -gt 13000 ]; then
    break
    fi

    sleep 1
    done


    Aggiunto il for no!!!!

    Consigli?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da aganallove
    SIZE=$(globusrun.bat -o -r grid-00.netlab.it '&(executable=/usr/bin/stat)(arguments= -c%s /home/globus/tesi/49_file.sep)')
    Ho notato bene solo adesso che usi gli apici singoli ('). Dentro gli apici singoli non possono avvenire le espansioni delle variabili!!! Quindi prima che mettevi "$k"_file.sep, lui cercava proprio un file "$k"_file.sep!!! E quindi dava errore come ho già spiegato ... SIZE è vuoto.
    Occhio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  9. #9
    .......non ho ben capito cosa devo fare...?
    Posso lasciare la variabile definità cosi' ho devo inventarmi qualcosa di diverso?
    Da quanto ho capito non vede la chiamata interna agli ' ' . giusto?

    Sono alle prime armi con il bash per cui perdona l'insistenza.

    Ciao e Grazie

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da aganallove
    .......non ho ben capito cosa devo fare...?
    Posso lasciare la variabile definità cosi' ho devo inventarmi qualcosa di diverso?
    Da quanto ho capito non vede la chiamata interna agli ' ' . giusto?

    Sono alle prime armi con il bash per cui perdona l'insistenza.
    Prova così:
    codice:
    SIZE=$(globusrun.bat -o -r grid-00.netlab.it &(executable=/usr/bin/stat)(arguments= -c%s /home/globus/tesi/$k_file.sep))
    Come vedi ho tolto gli apici singoli prima del & e prima dell'ultima parentesi.

    Ripeto ... non so cosa sia quel globusrun.bat, quel grid-00.netlab.it e quel modo di specificare executable=... e arguments=.....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.