[script SH] - paramètre avec * - [resolu]

- paramètre avec * - [resolu] [script SH] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 11-01-2005 à 13:14:52    

Bonjour,
 
j'ai un petit souci de syntaxe :  
je cherche à faire un script qui déplace des fichiers d'un répertoire vers un autre :
la ligne de commande donne qqch comme ca :  
?> deplace.sh tutu* rep1 rep2
(ca devrait déplacer tous les fichiers tutu* contenus dans rep1 dans le répertoire rep2)
 
Or voila mon probleme :
l'étoile n'est pas récupérée dans le paramètre, donc le script essaie de me déplacer un fichier nommé "tutu", ce qui ne correspond pas vraiment à mes attentes ;)
 
voici la version super basique du script :
 
###################
# DEBUT DU SCRIPT #
###################
 
script=`basename $0`
 
if [ $# -lt 4 ]; then
        echo "$script : manque d'arguments"
        exit 1
else
        echo $1
        echo $2
        echo $3
        mv $2/$1 $3/
        exit 0
fi
##########################
 
Merci pour votre aide


Message édité par Pouille42 le 11-01-2005 à 15:36:00
Reply

Marsh Posté le 11-01-2005 à 13:14:52   

Reply

Marsh Posté le 11-01-2005 à 13:23:35    


for i in `ls $1*`
do
mv $2/${i} $3
done


 
$ deplace.sh tutu rep1 rep2


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 11-01-2005 à 15:12:54    

Merci pour ta réponse.
Donc il n'est pas possible de passer le * en paramètre de mon script ?
(faire un ./deplace.sh tu* rep1 rep2 )

Reply

Marsh Posté le 11-01-2005 à 15:16:52    

avec des quotes ?

Reply

Marsh Posté le 11-01-2005 à 15:18:54    

T'as besoin d'un script pour ça ????
 
mv rep1/tutu* rep2/

Reply

Marsh Posté le 11-01-2005 à 15:28:07    

avec les quotes ca n'a pas l'air de marcher non plus (simples ou doubles)
 
Jarjar, le "mv" est la à titre d'exemple, tu as bien vu que je lance la commande
 
ce qui m'intéresse c'est le passage d'un paramètre contenant une *
mais c'est plus simple pour faire comprendre (sauf à quelques esprits retords ;) )

Reply

Marsh Posté le 11-01-2005 à 15:35:32    

apres discussion avec quelques autres personnes, il n'est apparement pas possible d'utiliser un paramètre avec *
 
Si vous avez la preuve du contraire, n'hésitez pas à poster, sinon c'est la solution apportée par black_lord qui est la bonne

Reply

Marsh Posté le 11-01-2005 à 15:51:00    

andro@tux blabla $ ls
blabla.sh  file1  file2  file3  fold
andro@tux blabla $ cat blabla.sh
#!/bin/bash
mv $1 $2
andro@tux blabla $ ./blabla.sh 'file*' fold/
andro@tux blabla $ ls -R
.:
blabla.sh  fold
 
./fold:
file1  file2  file3
andro@tux blabla $

Reply

Marsh Posté le 11-01-2005 à 15:51:20    

le * "étend" les paramètres, tu te retrouves alors avec un nombre inconnu de paramètres. A ce moment là tu dois passer rep1 et rep2 en premier comme arguments histoire de pas les perdre (pas obligé mais c'est plus simple). ensuite tu utilises "shift" pour dégager les arguments un par un
 


 
orig=$1
shift
dest=$1
shift
 
while [ $$ -gt 0 ]
do
mv ${orig}/$1 ${dest}
shift
done  


 
à l'arrache mais absolument sans garanties (surtout au niveau du test, man test est nécessaire).


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 11-01-2005 à 16:39:09    

apparement le grand secret se situe dans l'utilisation des quotes :)
 
black_lord > j'ai testé le dernier script
l'idée est bonne mais ca marche pas, il claque une erreur sur le shift inclus dans la boucle while
 
donc en bidouillant, j'ai fait ca :  
 
-------------------------
#!/bin/sh
 
orig=$1
shift
dest=$1
shift
 
cd ${orig}  
mv $1 ${dest}
---------------------------
 
et la ô joie, c'est le script d'andromede :)
 
?> deplace.sh rep1 rep2 t*    Ne fonctionne pas
?> deplace.sh rep1 rep2 "t*"  Fonctionne
?> deplace.sh rep1 rep2 't*'  Fonctionne
 
(et à noter que le script d'andromede fonctionne, bien que le paramètre* soit passé en premier)
 
Voilou, je n'ai pas grand chose à ajouter, merci pour votre aide :)
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed