Erreur "cp: opérande du fichier cible manquant" dans script shell [debutant]

Le
Hugues MORIN
--f46d042d05aacc07d504c4a4c915
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Bonjour

Voila je fais mes premiers pas dans le script shell.
Pour m'entrainer j'ai fait un script qui est sense copier des fichiers vers
d'autres emplacements en leur gardant les memes proprietaires et droits,
ainsi que creer une copie de sauvegarde du fichier cible.

Si ce n'ai que pour moi c'est une nouvelle syntaxe, il n'y a pas de grande
difficulte.
Neanmoins, j'ai l'erreur suivante a chaque "cp" executes:

cp: opérande du fichier cible manquant apres
`/home/./password_forgotten.php'
Pour en savoir davantage, faites: " cp --help ".

J'ai biensur cherche dans le man et sur mon ami google, mais j'ai rien
trouve qui resolve mon probleme.
Si je passe le "cp" manuellement en ligne de commande, cela fonctionne O_o

Voici le script:

#!/bin/bash
# Copy alpha version language file to beta and production
# only 1 argument: alpha version language file must be copy
# TUTO: http://doc.ubuntu-fr.org/tutoriel/script_shell

echo "Treatment"

BASE_FOLDER=/home/user/public_html/
LANG_FOLDER=/includes/languages/
DEV_VER=("alpha" "beta" "production")
LANGUE=("english" "espanol" "french" "italian")
SITE=("www" "www2")
i=0
cpt=1

while [ -d $BASE_FOLDER${DEV_VER[0]}/${SITE[i]} ] && [ $i -lt ${#SITE[*]} ]
do
#echo "test 1 ok - "$i" - "${DEV_VER[0]}/${SITE[i]}
j=0
while [ -f $BASE_FOLDER${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1
] && [ $j -lt ${#LANGUE[*]} ]
do
#echo "test 2 ok - "$j" -
"${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1
k=1
while [ -d $BASE_FOLDER${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]} ]
&& [ $k -lt ${#DEV_VER[*]} ]
do
#echo "test 3 ok - "$k" - "${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}
#echo $cpt" - cp -b -p --suffix=.bak
$BASE_FOLDER${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1
$BASE_FOLDER${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}"
echo "copy from "${DEV_VER[0]}/${SITE[i]}""${LANGUE[j]}/$1" to
"${DEV_VER[k]}/${SITE[i]}${LANGUE[j]}
cp -b -p --suffix=.bak
$BASE_FOLDER${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1
$BASE_FOLDER${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}
k=$(($k+1))
cpt=$(($cpt+1))
done
j=$(($j+1))
done
i=$(($i+1))
done

exit 0


Cordialement
Hugues

--f46d042d05aacc07d504c4a4c915
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Bonjour<div><br></div><div>Voila je fais mes premiers pas dans le script sh=
ell.</div><div>Pour m&#39;entrainer j&#39;ai fait un script qui est sense c=
opier des fichiers vers d&#39;autres emplacements en leur gardant les memes=
proprietaires et droits, ainsi que creer une copie de sauvegarde du fichie=
r cible.</div>
<div><br></div><div>Si ce n&#39;ai que pour moi c&#39;est une nouvelle synt=
axe, il n&#39;y a pas de grande difficulte.</div><div>Neanmoins, j&#39;ai l=
&#39;erreur suivante a chaque &quot;cp&quot; executes:</div><div><br></div>
<div>cp: opérande du fichier cible manquant apres `/home/./password_fo=
rgotten.php&#39;</div><div>Pour en savoir davantage, faites: &quot; cp --he=
lp &quot;.</div><div><br></div><div>J&#39;ai biensur cherche dans le man et=
sur mon ami google, mais j&#39;ai rien trouve qui resolve mon probleme.</d=
iv>
<div>Si je passe le &quot;cp&quot; manuellement en ligne de commande, cela =
fonctionne O_o</div><div><br></div><div>Voici le script:</div><div><br></di=
v><div><div>#!/bin/bash</div><div># Copy alpha version language file to bet=
a and production</div>
<div># only 1 argument: alpha version language file must be copy</div><div>=
# TUTO: <a href="http://doc.ubuntu-fr.org/tutoriel/script_shell">http://d=
oc.ubuntu-fr.org/tutoriel/script_shell</a></div><div><br></div><div>echo &q=
uot;Treatment&quot;</div>
<div><br></div><div>BASE_FOLDER=/home/user/public_html/</div><div>LANG_FO=
LDER=/includes/languages/</div><div>DEV_VER=(&quot;alpha&quot; &quot;be=
ta&quot; &quot;production&quot;)</div><div>LANGUE=(&quot;english&quot; &q=
uot;espanol&quot; &quot;french&quot; &quot;italian&quot;)</div>
<div>SITE=(&quot;www&quot; &quot;www2&quot;)</div><div>i=0</div><div>cp=
t=1</div><div><br></div><div>while [ -d $BASE_FOLDER${DEV_VER[0]}/${SITE[=
i]} ] &amp;&amp; [ $i -lt ${#SITE[*]} ]</div><div>do </div><div><span cla=
ss="Apple-tab-span" style="white-space:pre"> </span>#echo &quot;test 1 =
ok - &quot;$i&quot; - &quot;${DEV_VER[0]}/${SITE[i]}</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>j=0=
</div><div><span class="Apple-tab-span" style="white-space:pre"> </span=
>while [ -f $BASE_FOLDER${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1=
] &amp;&amp; [ $j -lt ${#LANGUE[*]} ]</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>do</d=
iv><div><span class="Apple-tab-span" style="white-space:pre"> </span>#=
echo &quot;test 2 ok - &quot;$j&quot; - &quot;${DEV_VER[0]}/${SITE[i]}$LANG=
_FOLDER${LANGUE[j]}/$1</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>k==
1</div><div><span class="Apple-tab-span" style="white-space:pre"> </sp=
an>while [ -d $BASE_FOLDER${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]} =
] &amp;&amp; [ $k -lt ${#DEV_VER[*]} ]</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>do</=
div><div><span class="Apple-tab-span" style="white-space:pre"> </span=
>#echo &quot;test 3 ok - &quot;$k&quot; - &quot;${DEV_VER[k]}/${SITE[i]}$LA=
NG_FOLDER${LANGUE[j]}</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>#ec=
ho $cpt&quot; - cp -b -p --suffix=.bak $BASE_FOLDER${DEV_VER[0]}/${SITE[i=
]}$LANG_FOLDER${LANGUE[j]}/$1 $BASE_FOLDER${DEV_VER[k]}/${SITE[i]}$LANG_FOL=
DER${LANGUE[j]}&quot;</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>ech=
o &quot;copy from &quot;${DEV_VER[0]}/${SITE[i]}&quot;&quot;${LANGUE[j]}=
/$1&quot; to &quot;${DEV_VER[k]}/${SITE[i]}${LANGUE[j]}</div><div><span =
class="Apple-tab-span" style="white-space:pre"> </span>cp -b -p --suf=
fix=.bak $BASE_FOLDER${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1 =
$BASE_FOLDER${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>k=
=$(($k+1))</div><div><span class="Apple-tab-span" style="white-space:=
pre"> </span>cpt=$(($cpt+1))</div><div><span class="Apple-tab-span" s=
tyle="white-space:pre"> </span>done</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>j==
$(($j+1))</div><div><span class="Apple-tab-span" style="white-space:pre=
"> </span>done</div><div><span class="Apple-tab-span" style="white-spac=
e:pre"> </span>i=$(($i+1))</div>
<div>done</div><div><br></div><div>exit 0</div></div><div><br></div><div><b=
r></div><div>Cordialement</div><div>Hugues</div><div><br></div><div><br></d=
iv><div><br></div>

--f46d042d05aacc07d504c4a4c915--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/CAMEeNc2_11yg+5XK2R=L+rg+bxzpYX5JTNzX_F6bkkfovafrDg@mail.gmail.com
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Sébastien MARQUE
Le #24635811
Bonjour,

tout l'info est dans le message d'erreur: "opérande du fichier cible
manquant", il manque la destination.

La raison est simple: entre les larmes qui me brouillent la vue en
voyant ton algo ;), j'ai pu discerner des choses du genre
'${DEV_VER[k]}', ce qui ne va pas renvoyer grand chose dans ton cas.

En bash on "expand" les variables. La lettre 'k' a donc pour valeur 'k',
et $k (ou ${k}) a pour valeur le contenu de la variable k.

${DEV_VER[$k]} ou ${DEV_VER[${k}]} donneront un résultat plus conforme à
ce que tu attends.

Cordialement.
seb

Le 12/07/2012 18:52, Hugues MORIN a écrit :
Bonjour

Voila je fais mes premiers pas dans le script shell.
Pour m'entrainer j'ai fait un script qui est sense copier des fichiers vers
d'autres emplacements en leur gardant les memes proprietaires et droits,
ainsi que creer une copie de sauvegarde du fichier cible.

Si ce n'ai que pour moi c'est une nouvelle syntaxe, il n'y a pas de grande
difficulte.
Neanmoins, j'ai l'erreur suivante a chaque "cp" executes:

cp: opérande du fichier cible manquant apres
`/home/..../password_forgotten.php'
Pour en savoir davantage, faites: " cp --help ".

J'ai biensur cherche dans le man et sur mon ami google, mais j'ai rien
trouve qui resolve mon probleme.
Si je passe le "cp" manuellement en ligne de commande, cela fonctionne O_o

Voici le script:

#!/bin/bash
# Copy alpha version language file to beta and production
# only 1 argument: alpha version language file must be copy
# TUTO: http://doc.ubuntu-fr.org/tutoriel/script_shell

echo "Treatment..."

BASE_FOLDER=/home/user/public_html/
LANG_FOLDER=/includes/languages/
DEV_VER=("alpha" "beta" "production")
LANGUE=("english" "espanol" "french" "italian")
SITE=("www" "www2")
i=0
cpt=1

while [ -d $BASE_FOLDER${DEV_VER[0]}/${SITE[i]} ]&& [ $i -lt ${#SITE[*]} ]
do
#echo "test 1 ok - "$i" - "${DEV_VER[0]}/${SITE[i]}
j=0
while [ -f $BASE_FOLDER${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1
]&& [ $j -lt ${#LANGUE[*]} ]
do
#echo "test 2 ok - "$j" -
"${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1
k=1
while [ -d $BASE_FOLDER${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]} ]
&& [ $k -lt ${#DEV_VER[*]} ]
do
#echo "test 3 ok - "$k" - "${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}
#echo $cpt" - cp -b -p --suffix=.bak
$BASE_FOLDER${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1
$BASE_FOLDER${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}"
echo "copy from "${DEV_VER[0]}/${SITE[i]}"..."${LANGUE[j]}/$1" to
"${DEV_VER[k]}/${SITE[i]}...${LANGUE[j]}
cp -b -p --suffix=.bak
$BASE_FOLDER${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1
$BASE_FOLDER${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}
k=$(($k+1))
cpt=$(($cpt+1))
done
j=$(($j+1))
done
i=$(($i+1))
done

exit 0


Cordialement
Hugues




--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Hugues MORIN
Le #24636741
--f46d042d05aa50837804c4b5cbb0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Bonjour

J'ai trouve l'erreur, a la place d'ecrire:
cp -b -p --suffix=.bak
/home/user/public_html/alpha/www/includes/languages/english/password_forgot ten.php
/home/user/public_html/beta/www/includes/languages/english

Suite a une erreur "d'encodage", il ecrivait:
cp -b -p --suffix=.bak /home/
user /public_html/alpha/www/includes/languages/english/password_forgotten.p hp
/home/user/public_html/beta/www/includes/languages/english

A priori, pour un tableau, il n'est pas necessaire de mettre le $
dans '${DEV_VER[k]}' .
Sa fonctionne sans. o_O
Mais je ne sais si sa fonctionne juste par hasard ou si c'est le
comportement normal.

Question subsidiaire:
Sebastien, c'est juste parce qu'il est "visuellement" tres charge que ca
pique les yeux :D ou alors parce qu'il est trop lourd ou trop archaique?
Comme je l'ai marque en objet, c'est mon 1er script don je suppose qu'il y
a des trucs a ameliorer mais quoi?


Cordialement
Hugues

PS: le code du script (nettoye des commentaires) qui fonctionne:

#!/bin/bash
# Copy alpha version language file to beta and production
# only 1 argument: alpha version language file must be copy
# TUTO: http://doc.ubuntu-fr.org/tutoriel/script_shell

echo "Treatment..."

BASE_FOLDER=/home/user/public_html/
LANG_FOLDER=/includes/languages/
DEV_VER=("alpha" "beta" "production")
LANGUE=("english" "espanol" "french" "italian")
SITE=("www" "www2")
i=0
cpt=1

while [ -d $BASE_FOLDER${DEV_VER[0]}/${SITE[i]} ] && [ $i -lt ${#SITE[*]} ]
do
j=0
while [ -f $BASE_FOLDER${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1
] && [ $j -lt ${#LANGUE[*]} ]
do
k=1
while [ -d $BASE_FOLDER${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]} ]
&& [ $k -lt ${#DEV_VER[*]} ]
do
echo "copy from "${DEV_VER[0]}/${SITE[i]}"..."${LANGUE[j]}/$1" to
"${DEV_VER[k]}/${SITE[i]}...${LANGUE[j]}
cp -b -p --suffix=.bak
$BASE_FOLDER${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1
$BASE_FOLDER${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}
k=$(($k+1))
done
j=$(($j+1))
done
i=$(($i+1))
done

exit 0


Le 13 juillet 2012 08:13, Sébastien MARQUE
Bonjour,

tout l'info est dans le message d'erreur: "opérande du fichier cible
manquant", il manque la destination.

La raison est simple: entre les larmes qui me brouillent la vue en voyant
ton algo ;), j'ai pu discerner des choses du genre '${DEV_VER[k]}', ce qu i
ne va pas renvoyer grand chose dans ton cas.

En bash on "expand" les variables. La lettre 'k' a donc pour valeur 'k',
et $k (ou ${k}) a pour valeur le contenu de la variable k.

${DEV_VER[$k]} ou ${DEV_VER[${k}]} donneront un résultat plus conforme à
ce que tu attends.

Cordialement.
seb

Le 12/07/2012 18:52, Hugues MORIN a écrit :

Bonjour

Voila je fais mes premiers pas dans le script shell.
Pour m'entrainer j'ai fait un script qui est sense copier des fichiers
vers
d'autres emplacements en leur gardant les memes proprietaires et droits,
ainsi que creer une copie de sauvegarde du fichier cible.

Si ce n'ai que pour moi c'est une nouvelle syntaxe, il n'y a pas de gran de
difficulte.
Neanmoins, j'ai l'erreur suivante a chaque "cp" executes:

cp: opérande du fichier cible manquant apres
`/home/..../password_**forgotten.php'
Pour en savoir davantage, faites: " cp --help ".

J'ai biensur cherche dans le man et sur mon ami google, mais j'ai rien
trouve qui resolve mon probleme.
Si je passe le "cp" manuellement en ligne de commande, cela fonctionne O _o

Voici le script:

#!/bin/bash
# Copy alpha version language file to beta and production
# only 1 argument: alpha version language file must be copy
# TUTO: http://doc.ubuntu-fr.org/**tutoriel/script_shell
echo "Treatment..."

BASE_FOLDER=/home/user/public_**html/
LANG_FOLDER=/includes/**languages/
DEV_VER=("alpha" "beta" "production")
LANGUE=("english" "espanol" "french" "italian")
SITE=("www" "www2")
i=0
cpt=1

while [ -d $BASE_FOLDER${DEV_VER[0]}/${**SITE[i]} ]&& [ $i -lt
${#SITE[*]} ]
do
#echo "test 1 ok - "$i" - "${DEV_VER[0]}/${SITE[i]}
j=0
while [ -f $BASE_FOLDER${DEV_VER[0]}/${**SITE[i]}$LANG_FOLDER${LANGUE[**
j]}/$1
]&& [ $j -lt ${#LANGUE[*]} ]
do
#echo "test 2 ok - "$j" -
"${DEV_VER[0]}/${SITE[i]}$**LANG_FOLDER${LANGUE[j]}/$1
k=1
while [ -d $BASE_FOLDER${DEV_VER[k]}/${**SITE[i]}$LANG_FOLDER${LANGUE[** j]}
]
&& [ $k -lt ${#DEV_VER[*]} ]
do
#echo "test 3 ok - "$k" - "${DEV_VER[k]}/${SITE[i]}$**
LANG_FOLDER${LANGUE[j]}
#echo $cpt" - cp -b -p --suffix=.bak
$BASE_FOLDER${DEV_VER[0]}/${**SITE[i]}$LANG_FOLDER${LANGUE[**j]}/$1
$BASE_FOLDER${DEV_VER[k]}/${**SITE[i]}$LANG_FOLDER${LANGUE[**j]}"
echo "copy from "${DEV_VER[0]}/${SITE[i]}"..."**${LANGUE[j]}/$1" to
"${DEV_VER[k]}/${SITE[i]}...${**LANGUE[j]}
cp -b -p --suffix=.bak
$BASE_FOLDER${DEV_VER[0]}/${**SITE[i]}$LANG_FOLDER${LANGUE[**j]}/$1
$BASE_FOLDER${DEV_VER[k]}/${**SITE[i]}$LANG_FOLDER${LANGUE[**j]}
k=$(($k+1))
cpt=$(($cpt+1))
done
j=$(($j+1))
done
i=$(($i+1))
done

exit 0


Cordialement
Hugues




--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/**FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@**lists.debian.org En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/**




--f46d042d05aa50837804c4b5cbb0
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Bonjour user /public_html/alpha/www/includes/languages/english/password_forgotten .php /home/user/public_html/beta/www/includes/languages/english <div>Comme je l&#39;ai marque en objet, c&#39;est mon 1er script don je sup pose qu&#39;il y a des trucs a ameliorer mais quoi?</div><div><br></div><di v><br></div><div>Cordialement</div><div>Hugues</div><br class="Apple-inte rchange-newline">
</div><div>PS: le code du script (nettoye des commentaires) qui fonctionne: </div><div><br></div><div><div>#!/bin/bash</div><div># Copy alpha version l anguage file to beta and production</div><div># only 1 argument: alpha vers ion language file must be copy</div>
<div>LANG_FOLDER=/includes/languages/</div><div>DEV_VER=(&quot;alpha&qu ot; &quot;beta&quot; &quot;production&quot;)</div><div>LANGUE=(&quot;engl ish&quot; &quot;espanol&quot; &quot;french&quot; &quot;italian&quot;)</div> <div>
SITE=(&quot;www&quot; &quot;www2&quot;)</div><div>i=0</div><div>cpt=1 </div><div><br></div><div>while [ -d $BASE_FOLDER${DEV_VER[0]}/${SITE[i]} ] &amp;&amp; [ $i -lt ${#SITE[*]} ]</div><div>do </div><div><span class= "Apple-tab-span" style="white-space:pre"> </span>j=0</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>while [ -f $BASE_FOLDER${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1 ] &am p;&amp; [ $j -lt ${#LANGUE[*]} ]</div><div><span class="Apple-tab-span" s tyle="white-space:pre"> </span>do</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>k= 1</div><div><span class="Apple-tab-span" style="white-space:pre"> </sp an>while [ -d $BASE_FOLDER${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]} ] &amp;&amp; [ $k -lt ${#DEV_VER[*]} ]</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>k =$(($k+1))</div><div><span class="Apple-tab-span" style="white-space: pre"> </span>done</div><div><span class="Apple-tab-span" style="white- space:pre"> </span>j=$(($j+1))</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>done< /div><div><span class="Apple-tab-span" style="white-space:pre"> </span> i=$(($i+1))</div><div>done</div><div><br></div><div>exit 0</div><div><br> </div>
Bonjour,<br>
<br>
tout l&#39;info est dans le message d&#39;erreur: &quot;opérande du fichi er cible manquant&quot;, il manque la destination.<br>
<br>
La raison est simple: entre les larmes qui me brouillent la vue en voyant t on algo ;), j&#39;ai pu discerner des choses du genre &#39;${DEV_VER[k]}&#3 9;, ce qui ne va pas renvoyer grand chose dans ton cas.<br>
<br>
En bash on &quot;expand&quot; les variables. La lettre &#39;k&#39; a donc p our valeur &#39;k&#39;, et $k (ou ${k}) a pour valeur le contenu de la vari able k.<br>
<br>
${DEV_VER[$k]} ou ${DEV_VER[${k}]} donneront un résultat plus conforme à ce que tu attends.<br>
<br>
Cordialement.<br>
seb<br>
<br>
Le 12/07/2012 18:52, Hugues MORIN a écrit :<div class="HOEnZb"><div cla ss="h5"><br>
Bonjour<br>
<br>
Voila je fais mes premiers pas dans le script shell.<br>
Pour m&#39;entrainer j&#39;ai fait un script qui est sense copier des fichi ers vers<br>
d&#39;autres emplacements en leur gardant les memes proprietaires et droits ,<br>
ainsi que creer une copie de sauvegarde du fichier cible.<br>
<br>
Si ce n&#39;ai que pour moi c&#39;est une nouvelle syntaxe, il n&#39;y a pa s de grande<br>
difficulte.<br>
Neanmoins, j&#39;ai l&#39;erreur suivante a chaque &quot;cp&quot; executes: <br>
<br>
cp: opérande du fichier cible manquant apres<br>
`/home/..../password_ Pour en savoir davantage, faites: &quot; cp --help &quot;.<br>
<br>
J&#39;ai biensur cherche dans le man et sur mon ami google, mais j&#39;ai r ien<br>
trouve qui resolve mon probleme.<br>
Si je passe le &quot;cp&quot; manuellement en ligne de commande, cela fonct ionne O_o<br>
<br>
Voici le script:<br>
<br>
#!/bin/bash<br>
# Copy alpha version language file to beta and production<br>
# only 1 argument: alpha version language file must be copy<br>
# TUTO: <br>
echo &quot;Treatment...&quot;<br>
<br>
BASE_FOLDER=/home/user/public_<u></u>html/<br>
LANG_FOLDER=/includes/<u></u>languages/<br>
DEV_VER=(&quot;alpha&quot; &quot;beta&quot; &quot;production&quot;)<br>
LANGUE=(&quot;english&quot; &quot;espanol&quot; &quot;french&quot; &quot; italian&quot;)<br>
SITE=(&quot;www&quot; &quot;www2&quot;)<br>
i=0<br>
cpt=1<br>
<br>
while [ -d $BASE_FOLDER${DEV_VER[0]}/${<u></u>SITE[i]} ]&amp;&amp;  [ $i -lt ${#SITE[*]} ]<br>
do<br>
#echo &quot;test 1 ok - &quot;$i&quot; - &quot;${DEV_VER[0]}/${SITE[i]}<br>
j=0<br>
while [ -f $BASE_FOLDER${DEV_VER[0]}/${<u></u>SITE[i]}$LANG_FOLDER${LANGUE[ <u></u>j]}/$1<br>
]&amp;&amp;  [ $j -lt ${#LANGUE[*]} ]<br>
do<br>
#echo &quot;test 2 ok - &quot;$j&quot; -<br>
&quot;${DEV_VER[0]}/${SITE[i]}$<u></u>LANG_FOLDER${LANGUE[j]}/$1<br>
k=1<br>
while [ -d $BASE_FOLDER${DEV_VER[k]}/${<u></u>SITE[i]}$LANG_FOLDER${LANGUE[ <u></u>j]} ]<br>
&amp;&amp;  [ $k -lt ${#DEV_VER[*]} ]<br>
do<br>
#echo &quot;test 3 ok - &quot;$k&quot; - &quot;${DEV_VER[k]}/${SITE[i]}$<u> </u>LANG_FOLDER${LANGUE[j]}<br>
#echo $cpt&quot; - cp -b -p --suffix=.bak<br>
$BASE_FOLDER${DEV_VER[0]}/${<u></u>SITE[i]}$LANG_FOLDER${LANGUE[<u></u>j]}/ $1<br>
$BASE_FOLDER${DEV_VER[k]}/${<u></u>SITE[i]}$LANG_FOLDER${LANGUE[<u></u>j]}& quot;<br>
echo &quot;copy from &quot;${DEV_VER[0]}/${SITE[i]}&quot;...&quot;<u></u>${ LANGUE[j]}/$1&quot; to<br>
&quot;${DEV_VER[k]}/${SITE[i]}...${<u></u>LANGUE[j]}<br>
cp -b -p --suffix=.bak<br>
$BASE_FOLDER${DEV_VER[0]}/${<u></u>SITE[i]}$LANG_FOLDER${LANGUE[<u></u>j]}/ $1<br>
$BASE_FOLDER${DEV_VER[k]}/${<u></u>SITE[i]}$LANG_FOLDER${LANGUE[<u></u>j]}< br>
k=$(($k+1))<br>
cpt=$(($cpt+1))<br>
done<br>
j=$(($j+1))<br>
done<br>
i=$(($i+1))<br>
done<br>
<br>
exit 0<br>
<br>
<br>
Cordialement<br>
Hugues<br>
<br>
</blockquote>
<br></div></div><span class="HOEnZb"><font color="#888888">
-- <br>
Lisez la FAQ de la liste avant de poser une question :<br>
<br>
Pour vous DESABONNER, envoyez un message avec comme objet &quot;unsubscribe &quot;<br>
vers En cas de soucis, contactez EN ANGLAIS Archive: <br>
</font></span></blockquote></div><br></div>

--f46d042d05aa50837804c4b5cbb0--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/CAMEeNc0ry88hbemxm+Co+
Basile Starynkevitch
Le #24639711
On Thu, 12 Jul 2012 18:52:26 +0200
Hugues MORIN
Bonjour

Voila je fais mes premiers pas dans le script shell.
Pour m'entrainer j'ai fait un script qui est sense copier des fichiers ve rs
d'autres emplacements en leur gardant les memes proprietaires et droits,
ainsi que creer une copie de sauvegarde du fichier cible.




Un conseil pour déboguer un script shell: Mettre le temps du déboguage les options v et x
dans la première ligne, cad #!/bin/bash -vx

Note aussi que le shell posix /bin/sh est différent du bash.


Cordialement

--
Basile STARYNKEVITCH http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mine, sont seulement les miennes} ***

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Hugues MORIN
Le #24641021
--bcaec554d4b2d0b08904c4e1fc8e
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Salut

Merci pour l'astuce, ca va me simplifier les choses.

Pour info (pour ceux qui lirons ce post en archive), le -vx est d'autres
methodes de debuggage sont exliquees la:
http://wiki.bash-hackers.org/scripting/debuggingtips

Cordialement
Hugues






Le 15 juillet 2012 09:49, Basile Starynkevitch écrit :

On Thu, 12 Jul 2012 18:52:26 +0200
Hugues MORIN
> Bonjour
>
> Voila je fais mes premiers pas dans le script shell.
> Pour m'entrainer j'ai fait un script qui est sense copier des fichiers
vers
> d'autres emplacements en leur gardant les memes proprietaires et droits ,
> ainsi que creer une copie de sauvegarde du fichier cible.


Un conseil pour déboguer un script shell: Mettre le temps du déboguag e les
options v et x
dans la première ligne, cad #!/bin/bash -vx

Note aussi que le shell posix /bin/sh est différent du bash.


Cordialement

--
Basile STARYNKEVITCH http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mine, sont seulement les miennes} ***




--bcaec554d4b2d0b08904c4e1fc8e
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<br>

<div>On Thu, 12 Jul 2012 18:52:26 +0200<br>
Hugues MORIN &lt; <br>
&gt; Bonjour<br>
&gt;<br>
&gt; Voila je fais mes premiers pas dans le script shell.<br>
&gt; Pour m&#39;entrainer j&#39;ai fait un script qui est sense copier des fichiers vers<br>
&gt; d&#39;autres emplacements en leur gardant les memes proprietaires et d roits,<br>
&gt; ainsi que creer une copie de sauvegarde du fichier cible.<br>
<br>
<br>
</div>Un conseil pour déboguer un script shell: Mettre le temps du débo guage les options v et x<br>
dans la première ligne, cad #!/bin/bash -vx<br>
<br>
Note aussi que le shell posix /bin/sh est différent du bash.<br>
<br>
<br>
Cordialement<br>
<span><font color="#888888"><br>
--<br>
Basile STARYNKEVITCH         email: basile&lt;at&gt;starynkevitch&lt;dot&gt;net mobile: <a href="tel:% 2B33%206%208501%202359" target="_blank" value="+33685012359">+33 6 8501 2359</a><br>
8, rue de la Faiencerie, 92340 Bourg La Reine, France<br>
*** opinions {are only mine, sont seulement les miennes} ***<br>
</font></span></blockquote></div><br>

--bcaec554d4b2d0b08904c4e1fc8e--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Sébastien MARQUE
Le #24642071
Bonjour,

oui, si ça me piquait les yeux c'est surtout parce que c'était difficile
à lire (majuscules, pas d'espace, signes cabalistiques toussa toussa)
:), après ce sont des goûts personnels qui peuvent très bien ne pas être
les plus judicieux:

* je trouve les tests
"[ expr1 ] && [ expr2]"
moins élégants que
"[ expr1 -a expr2 ]"

* les incrémentations
"i=$(($i+1))"
sont facilement remplaçables par des
"let i++" ou "let 'i += 1'"

* je préfère les boucles
"for (( i = 0; ; i++ )); do ... [ ! -e ${CHEMIN[$i} ] && break; done" aux
"i=0; while [ -e ${CHEMIN[$i]} ]; do ... i=$(($i+1)); done",
bien que c'est vrai que dans ce cas for ne peut pas évaluer de test non
arithmétique ni faire appel à une fonction, d'où le "[ ! test ] &&
break", mais d'un autre côté initialisation et incrémentation sont fait
par une même instruction.

* enfin puisqu'on est dans un fichier et qu'on est pas à quelques octets
près:
"cp -p"
peut aussi s'écrire
"cp --preserve=mode,ownership,timestamps"
de mettre les version longues des options permet de mieux voir ce qui
est fait, et si tu mets la commande longue dans une variable ça éclaire
encore mieux.

voilà c'est tout :)

et aussi merci car j'avais jamais fait attention que l'indexation de
tableau pouvait se faire sans passer par les substitutions.

Cordialement.
seb

Le 13/07/2012 15:09, Hugues MORIN a écrit :
Bonjour

J'ai trouve l'erreur, a la place d'ecrire:
cp -b -p --suffix=.bak
/home/user/public_html/alpha/www/includes/languages/english/password_forgotten.php
/home/user/public_html/beta/www/includes/languages/english

Suite a une erreur "d'encodage", il ecrivait:
cp -b -p --suffix=.bak /home/
user /public_html/alpha/www/includes/languages/english/password_forgotten.php
/home/user/public_html/beta/www/includes/languages/english

A priori, pour un tableau, il n'est pas necessaire de mettre le $
dans '${DEV_VER[k]}' .
Sa fonctionne sans. o_O
Mais je ne sais si sa fonctionne juste par hasard ou si c'est le
comportement normal.

Question subsidiaire:
Sebastien, c'est juste parce qu'il est "visuellement" tres charge que ca
pique les yeux :D ou alors parce qu'il est trop lourd ou trop archaique?
Comme je l'ai marque en objet, c'est mon 1er script don je suppose qu'il y
a des trucs a ameliorer mais quoi?


Cordialement
Hugues

PS: le code du script (nettoye des commentaires) qui fonctionne:

#!/bin/bash
# Copy alpha version language file to beta and production
# only 1 argument: alpha version language file must be copy
# TUTO: http://doc.ubuntu-fr.org/tutoriel/script_shell

echo "Treatment..."

BASE_FOLDER=/home/user/public_html/
LANG_FOLDER=/includes/languages/
DEV_VER=("alpha" "beta" "production")
LANGUE=("english" "espanol" "french" "italian")
SITE=("www" "www2")
i=0
cpt=1

while [ -d $BASE_FOLDER${DEV_VER[0]}/${SITE[i]} ]&& [ $i -lt ${#SITE[*]} ]
do
j=0
while [ -f $BASE_FOLDER${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1
]&& [ $j -lt ${#LANGUE[*]} ]
do
k=1
while [ -d $BASE_FOLDER${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]} ]
&& [ $k -lt ${#DEV_VER[*]} ]
do
echo "copy from "${DEV_VER[0]}/${SITE[i]}"..."${LANGUE[j]}/$1" to
"${DEV_VER[k]}/${SITE[i]}...${LANGUE[j]}
cp -b -p --suffix=.bak
$BASE_FOLDER${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1
$BASE_FOLDER${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}
k=$(($k+1))
done
j=$(($j+1))
done
i=$(($i+1))
done

exit 0


Le 13 juillet 2012 08:13, Sébastien MARQUE
Bonjour,

tout l'info est dans le message d'erreur: "opérande du fichier cible
manquant", il manque la destination.

La raison est simple: entre les larmes qui me brouillent la vue en voyant
ton algo ;), j'ai pu discerner des choses du genre '${DEV_VER[k]}', ce qui
ne va pas renvoyer grand chose dans ton cas.

En bash on "expand" les variables. La lettre 'k' a donc pour valeur 'k',
et $k (ou ${k}) a pour valeur le contenu de la variable k.

${DEV_VER[$k]} ou ${DEV_VER[${k}]} donneront un résultat plus conforme à
ce que tu attends.

Cordialement.
seb

Le 12/07/2012 18:52, Hugues MORIN a écrit :

Bonjour

Voila je fais mes premiers pas dans le script shell.
Pour m'entrainer j'ai fait un script qui est sense copier des fichiers
vers
d'autres emplacements en leur gardant les memes proprietaires et droits,
ainsi que creer une copie de sauvegarde du fichier cible.

Si ce n'ai que pour moi c'est une nouvelle syntaxe, il n'y a pas de grande
difficulte.
Neanmoins, j'ai l'erreur suivante a chaque "cp" executes:

cp: opérande du fichier cible manquant apres
`/home/..../password_**forgotten.php'
Pour en savoir davantage, faites: " cp --help ".

J'ai biensur cherche dans le man et sur mon ami google, mais j'ai rien
trouve qui resolve mon probleme.
Si je passe le "cp" manuellement en ligne de commande, cela fonctionne O_o

Voici le script:

#!/bin/bash
# Copy alpha version language file to beta and production
# only 1 argument: alpha version language file must be copy
# TUTO: http://doc.ubuntu-fr.org/**tutoriel/script_shell
echo "Treatment..."

BASE_FOLDER=/home/user/public_**html/
LANG_FOLDER=/includes/**languages/
DEV_VER=("alpha" "beta" "production")
LANGUE=("english" "espanol" "french" "italian")
SITE=("www" "www2")
i=0
cpt=1

while [ -d $BASE_FOLDER${DEV_VER[0]}/${**SITE[i]} ]&& [ $i -lt
${#SITE[*]} ]
do
#echo "test 1 ok - "$i" - "${DEV_VER[0]}/${SITE[i]}
j=0
while [ -f $BASE_FOLDER${DEV_VER[0]}/${**SITE[i]}$LANG_FOLDER${LANGUE[**
j]}/$1
]&& [ $j -lt ${#LANGUE[*]} ]
do
#echo "test 2 ok - "$j" -
"${DEV_VER[0]}/${SITE[i]}$**LANG_FOLDER${LANGUE[j]}/$1
k=1
while [ -d $BASE_FOLDER${DEV_VER[k]}/${**SITE[i]}$LANG_FOLDER${LANGUE[**j]}
]
&& [ $k -lt ${#DEV_VER[*]} ]
do
#echo "test 3 ok - "$k" - "${DEV_VER[k]}/${SITE[i]}$**
LANG_FOLDER${LANGUE[j]}
#echo $cpt" - cp -b -p --suffix=.bak
$BASE_FOLDER${DEV_VER[0]}/${**SITE[i]}$LANG_FOLDER${LANGUE[**j]}/$1
$BASE_FOLDER${DEV_VER[k]}/${**SITE[i]}$LANG_FOLDER${LANGUE[**j]}"
echo "copy from "${DEV_VER[0]}/${SITE[i]}"..."**${LANGUE[j]}/$1" to
"${DEV_VER[k]}/${SITE[i]}...${**LANGUE[j]}
cp -b -p --suffix=.bak
$BASE_FOLDER${DEV_VER[0]}/${**SITE[i]}$LANG_FOLDER${LANGUE[**j]}/$1
$BASE_FOLDER${DEV_VER[k]}/${**SITE[i]}$LANG_FOLDER${LANGUE[**j]}
k=$(($k+1))
cpt=$(($cpt+1))
done
j=$(($j+1))
done
i=$(($i+1))
done

exit 0


Cordialement
Hugues




--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/**FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@**lists.debian.org En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/**







--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Daniel Huhardeaux
Le #24642111
Bonjour

Le 16/07/2012 08:35, Sébastien MARQUE a écrit :
Bonjour,

oui, si ça me piquait les yeux c'est surtout parce que c'était
difficile à lire (majuscules, pas d'espace, signes cabalistiques
toussa toussa) :), après ce sont des goûts personnels qui peuvent très
bien ne pas être les plus judicieux:

* je trouve les tests
"[ expr1 ] && [ expr2]"
moins élégants que
"[ expr1 -a expr2 ]"



Ce n'est pas la même chose. Le premier exemple dit "expr2 est réalisée
si expr1 est vrai". Le second exemple dit "si expr1 ET expr2 sont vrais"

--
Daniel

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Publicité
Poster une réponse
Anonyme