#1 Le 19/01/2008, à 17:32
- atlas2003
script bash et affectation de variable
Bonjour a tous.
Je suis en train de realiser (mon premier) script bash.
J'ai un petit probleme concernant les nom de fichiers/repertoires qui possèdent des espaces.
Voici un exemple. Dans la console, je peux taper ceci:
cat "/home/nicolas/a a.txt"
Je n'ai pas d'erreur, ca marche tres bien car mon nom de fichier est encapsuler entre les doubles quote.
Si j'essais de faire un script bash:
#!/bin/sh
$f="/home/nicolas/a a.txt"
cat "$f"
Lorsque je l'exécute, cela m'affiche:
./test.sh: 4: =/home/nicolas/a a.txt: not found
cat: : No such file or directory
Visiblement, il me manque quelque chose pour comprendre mais quoi?
merci a vous, bonne journée!
EDIT: ha oui un autre mini question: Si j'execute des commandes dans mon script genre "cp", "mv", "mplayer" etc... elle s'execute bien mais je ne vois pas sur la sortie standart la ligne de commande. Je ne vois juste que son resultat. Est ce qu'il y a un moyen d'afficher aussi la commande lancé?
Dernière modification par atlas2003 (Le 19/01/2008, à 20:27)
Blabla autour d'Ubuntu > http://back2web.com/blabla/
Hors ligne
#2 Le 19/01/2008, à 17:58
- abetsic
Re : script bash et affectation de variable
Bonsoir,
la déclaration d'une variable en bash ne se fait pas comme tu l'écris mais comme ceci :
ta_variable="/ton/fichier"
cat "$ta_variable"
Tu peux mettre des echo avant l'execution de tes commandes pour afficher les commandes.
Hors ligne
#3 Le 19/01/2008, à 18:17
- atlas2003
Re : script bash et affectation de variable
Ha oui autant pour moi
Surtout que je le sais... J'avais fais une erreur mais je ne l'avais pas vu
Mais sinon pour ma deuxieme question, une idée?
Dernière modification par atlas2003 (Le 19/01/2008, à 18:24)
Blabla autour d'Ubuntu > http://back2web.com/blabla/
Hors ligne
#4 Le 19/01/2008, à 18:31
- lut!n
Re : script bash et affectation de variable
Pas vraiment, il faudrait que tu mettes un echo 'texte de la commande' avant de l'executer, il n'y a pas trop d'autre moyen.
A+
Hors ligne
#5 Le 19/01/2008, à 18:58
- atlas2003
Re : script bash et affectation de variable
Ok bon c'est pas si grave. Par contre j'ai rencontrer un autre probleme depuis tout a l'heure (surement un de mes derniers (j'espere..))
Je vais devoir donner des arguments a mon script.
Disons par exemple:
monScript -input truc.avi -output autretruc
Pour rester simple je ne met que 4 parametres mais je vais en avoir plus.
Je vais donc faire une boucle pour parcourir tous mes arguments
Et dans un switch ensuite, je veux tester par exemple:
case mon arg = -input
inputFile = l'argument d'apres
break
Comment est ce que je peux avoir l'argument d'apres?
Disons que dans ma boucle for je peux ajouter un compteur pour avoir un index. Mais ensuite, j'ai essayé de faire quelque chose comme ca:
x=3
$$x <-Je voudrais que ca représente le 3eme arguments
ou meme ca: ${$x}
mais ca ne marche pas
Blabla autour d'Ubuntu > http://back2web.com/blabla/
Hors ligne
#6 Le 19/01/2008, à 19:18
- lut!n
Re : script bash et affectation de variable
for i in "$@"; do
case $i in
"foo") action;
"bar") action;
esac
done
te permet de parcourir les arguments 1 par 1, sans avoir besoin de compteur ou quoi que ce soit.
Hors ligne
#7 Le 19/01/2008, à 19:21
- atlas2003
Re : script bash et affectation de variable
merci lut!n. Mais je me suis peut etre mal exprimé, ou alors je ne comprend pas ta réponse.
En fait pour etre simple, mon probleme et que je voudrais recupéré l'argument numero X dans mon script.
Si c'est statique, disons l'argument 3, il me suffit d'utiliser $3
Mais si c'est dynamique, et que le numero est stocké dans une variable:
genre x=3
$$x ne me donne pas l'equivalent de $3
J'ai du mal a m'expliquer
Blabla autour d'Ubuntu > http://back2web.com/blabla/
Hors ligne
#8 Le 19/01/2008, à 19:23
- lut!n
Re : script bash et affectation de variable
ok, si tu veux vraiment faire comme ça (bien que si le but c'est de parcourir les arguments du debut a la fin j'ai du mal a voir ou est l'interet), c'est ${!variable} qu'il faut utiliser pour faire ce que tu cherches
x=3
echo ${!x} => le contenu de $3
Hors ligne
#9 Le 19/01/2008, à 19:41
- atlas2003
Re : script bash et affectation de variable
cool merci je vais essayer ca.
Tu dis que tu ne vois pas l'interet. Peut etre que je me complique la vie pour rien?
En fait si je lance mon script comme ceci:
script.sh -input in.txt -ouput out.txt
ou comme ca:
script.sh -ouput out.txt -input in.txt
pour savoir ce que sont mes arguments, je pense que je vais faire une boucle sur tous les param.
Ensuite dans cette boucle je fais un switch avec deux case:
un case sur le "-input"
et un case sur le "-output"
Si je rentre dans le case "-input" par exemple, normalement ma variable qui representera mon fichier d'entré sera le numero de l'argument qui reprensre "-input" + 1
Blabla autour d'Ubuntu > http://back2web.com/blabla/
Hors ligne
#10 Le 19/01/2008, à 19:52
- lut!n
Re : script bash et affectation de variable
oui, c'est exactement ce que je disais deux posts au dessus
En l'occurence, un while peut etre pus adapté, comme ça
while [ -n "$1" ]; do
case $1 in
"input") shift; infile=$1 ;;
"output") shift; outfile=$1 ;;
esac
shift
done
shift 'décale" la liste des arguments d'1 cran, donc apres un shift $2 devient $1, $3 devient $2, etc, etc
Hors ligne
#11 Le 19/01/2008, à 20:02
- atlas2003
Re : script bash et affectation de variable
Haaa ok
Mais dans autre post tu avais pas mis "shift" encore
La ca me parle beaucoup plus!
Merci bien
Blabla autour d'Ubuntu > http://back2web.com/blabla/
Hors ligne
#12 Le 19/01/2008, à 20:09
- yurek
Re : script bash et affectation de variable
pour faire simple sous unix donc linux les espaces son protégés par un antislash (ou slash je sais pas ) \
voici ta commande qui fonctionne :
cat "/home/nicolas/a\ a.txt"
http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros
Hors ligne
#13 Le 19/01/2008, à 20:12
- lut!n
Re : script bash et affectation de variable
pas besoin, si le nom de fichier est deja entre "" . il aurait fallu utiliser '\ ' si la commande avait été cat fichier\ espace.txt
D'ailleurs l'erreur initiale ne concernait pas un espace dans le nom du fichier, mais un probleme avec l'affectation de la variable, donc atlas si tu pouvais éditer le titre pour qu'il reflete un peu mieux la problématique, ce serait cool
Hors ligne
#14 Le 19/01/2008, à 20:27
- atlas2003
Re : script bash et affectation de variable
fait!
Blabla autour d'Ubuntu > http://back2web.com/blabla/
Hors ligne
#15 Le 19/01/2008, à 20:47
- abetsic
Re : script bash et affectation de variable
Tu peux aussi regarder du coté de getopt qui est un programme pour gérer les options dans les scripts... Ne l'ayant jamais utilisé dans un script bash (uniqument utilisé en C mais ça doit pas être trop différent), je peux pas trop t'aider de toute façon il doit y avoir des exemples sur internet, et il y a toujours le man.
Hors ligne