Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile 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 smile
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 smile


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 smile
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 smile
Mais dans autre post tu avais pas mis "shift" encore tongue
La ca me parle beaucoup plus!

Merci bien smile


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 smile

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