PDA

View Full Version : [script bash] stampare tutti i nomi di file e directory


mame83
28-06-2011, 12:34
ciao a tutti ho il seguente problema: voglio stampare a video tutti i file e directory della stessa directory dove sta lo script bash su ubuntu. Ho usato un for in ls ma mi da un syntax error. qualcuno saprebbe aiutarmi ??? grazie

#!/bin/sh
for file in 'ls-l' do
echo $file
done

zuper
28-06-2011, 17:19
ciao a tutti ho il seguente problema: voglio stampare a video tutti i file e directory della stessa directory dove sta lo script bash su ubuntu. Ho usato un for in ls ma mi da un syntax error. qualcuno saprebbe aiutarmi ??? grazie

#!/bin/sh
for file in 'ls-l' do
echo $file
done


ls -l

mame83
28-06-2011, 18:20
ls -l

scusa non ho capito. non devo usare tra virgola semplice ls -l??? questo vuoi dire???

BlackShark92
28-06-2011, 20:43
Esiste un comando apposito, ls che, dotato di appositi switch, permette di vedere tutte le info di un file. Es.. ls -i mostra anche l'i-node number, ls -a mostra anche quelli nascosti e così via...

kevinpirola
28-06-2011, 21:12
ma soprattutto è

ls SPAZIO -l

sennò non funziona

mame83
29-06-2011, 09:43
ho fatto come mi avete suggerito

#!/bin/sh
for file in 'ls -l'
do
echo $file
done

cioè lasciando lo spazio tra ls e l. ma l output mi restituisce proprio ls -l
non so piu cosa fare :mc: spero mi aiutate

mame83
29-06-2011, 10:10
ho fatto come mi avete suggerito

#!/bin/sh
for file in 'ls -l'
do
echo $file
done

cioè lasciando lo spazio tra ls e l. ma l output mi restituisce proprio ls -l
non so piu cosa fare :mc: spero mi aiutate
se invece non uso il singolo apice per ls -l in output mi da :
ls
-l
:mc:

marco.r
29-06-2011, 10:32
#!/bin/sh
for file in `ls-l` do
echo $file
done


Backquote invece che quote
oppure anche



#!/bin/sh
for file in $(ls-l) do
echo $file
done

marco.r
29-06-2011, 10:44
ehm, ovviamente vanno riaggiunti gli spazi... ma non riesco a modificare il post...

mame83
29-06-2011, 10:58
#!/bin/sh
for file in `ls-l` do
echo $file
done


Backquote invece che quote
oppure anche



#!/bin/sh
for file in $(ls-l) do
echo $file
done


ho provato funziona grazie. vorrei sapere una cosa: se un file ha il nome compreso dello spazio come lo faccio a stampare sulla stessa riga???
ESEMPIO se il file è del tipo nome 1 me lo stampa su due righe:
nome
1
come posso ovviare a ciò???

marco.r
29-06-2011, 11:39
ho provato funziona grazie. vorrei sapere una cosa: se un file ha il nome compreso dello spazio come lo faccio a stampare sulla stessa riga???
ESEMPIO se il file è del tipo nome 1 me lo stampa su due righe:
nome
1
come posso ovviare a ciò???

Hai bisogno solo dei nomi o anche delle informazioni che ti da il parametro "-l" ?

mame83
29-06-2011, 11:49
Hai bisogno solo dei nomi o anche delle informazioni che ti da il parametro "-l" ?

solo dei nomi.
ripeto voglio che il file( o directory) testo 1 venga visualizzato sulla stessa linea , non su due linee consecutive.

marco.r
29-06-2011, 12:11
solo dei nomi.
ripeto voglio che il file( o directory) testo 1 venga visualizzato sulla stessa linea , non su due linee consecutive.

#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for file in * ; do
echo $file
done
IFS=$SAVEIFS

mame83
30-06-2011, 09:49
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for file in * ; do
echo $file
done
IFS=$SAVEIFS

perdonami ma non ho capito molto non essendo molto pratico degli script.
nel mio script uso bin/sh mentre invece tu usi bin/bash. Poi questo ifs cos è???
e sopratutto il for con * cosa si intende??

marco.r
30-06-2011, 10:30
IFS e' la variabile che contiene i caratteri considerati separatori per la shell expansion
http://www.faqs.org/docs/bashman/bashref_33.html
In pratica ho tolto lo spazio come separatore in modo da tenere unite le parole con spazi dentro

/bin/bash e' il percorso all'eseguibile di bash

sui sistemi unix /bin/sh e' di solito un link a /bin/bash, per cui in realta' non cambia tanto.

marco.r
30-06-2011, 10:31
ah dimenticavo
ovviamente "*" e' la wildcard che viene espansa dalla shell in tutti i file della cartella corrente