Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [BASH] problema con if e test

    ciao, eccomi ancora qua
    ecco il mio codice:
    codice:
    #!/bin/sh
    PATH=$PATH:/home/valekate/Desktop
    cd $1
    for i in *; do
       if [ -d $i ]; then 
         mkdir $2/$i	
         dir.sh $i $2/$i   
       elif [ -f $i ]; then
    	if test "$i" = *.java; then 
         	    cat -n $i >> $2/$i
    	elif test "$i" = *.c; then
    	    cat -n $i >> $2/$i
    	fi
       fi     
    done
    praticamente copia tutti i file con estensione *.c e *.java in una cartella passata allo script... il problema è nella riga 9, al if test "$i" = *.java; then .......
    l'errore è:
    /home/valekate/Desktop/dir.sh: line 9: test: too many arguments
    :master:
    V+K

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

    Re: [BASH] problema con if e test

    si può fare così:
    codice:
    ...
    elif [ -f $i ]; then
        ext=${i##*.}
        if [ "$ext" = "$i" ]; then ext=""; fi
    
        if [ "$ext" = "java" ]; then
            ....
        elif [ "$ext" = "c" ]; then
            ....
        fi
    fi
    ...
    Visto che so già che mi chiederai cosa è ${i##*.}, ti dico che è una espansione un po' speciale. In pratica elimina tutto quello che c'è prima della estensione (*.). Con l'unico difetto che se non c'è estensione, ritorna esattamente il valore di $i (per questo c'è un test dopo).

    Per maggiori info fai man bash e guarda nella sezione "Parameter Expansion".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    ok, grazie! domani provo!
    V+K

  4. #4
    grande! funziona benissimo!!! grazieeeeee
    un'altra parte dell'esercizio kiede ke i file copiati abbiano ogni riga numerata... è facile da fare? sennò lascio perdere tanto il grosso dell'esercizio è fatto...
    V+K

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da valer_85
    un'altra parte dell'esercizio kiede ke i file copiati abbiano ogni riga numerata... è facile da fare? sennò lascio perdere tanto il grosso dell'esercizio è fatto...
    Semplice:
    codice:
    NUM=1
    
    cat tuo_file | while read LINEA
    do
        echo "$NUM $LINEA" >> altro_file
        let "NUM += 1"
    done
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Ah .. una precisazione: il pezzo di codice tra il while e il done, viene eseguito in una sub-shell. Quindi non aspettarti di poter alterare altre variabili dello script dall'interno di quel blocco!!!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    okok, grazie mille! ora mi manca solo 1 altro esercizio e ho terminato! c penserò nei prossimi giorni! grazie davvero, 6 stato fondamentale!
    V+K

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.