#1 Le 11/10/2008, à 20:03
- Fermerboy
[Résolu][Bash]Vérifier qu'un fichier est téléchargeable
Salut les gens !
J'ai récherché sur google et ubuntu-fr mais pas de résultat suffisant.
J'ai commencé le bash aujourd'hui en fouinant un peu sur internet et dans l'optique de faire mon script, je voudrais savoir si il y a une commande permettant de vérifier si tel ou tel fichier est téléchargeable. Si c'est le cas, il le télécharge et passe directement à la suite du script sans vérifier les autres.
Je m'explique.
Je veux télécharger la dernière version d'un logiciel (sur sourceforge par exemple) car dans les dépots du site le logciel n'est pas toujours à jour.
=> Vérifie que la version 2.0 soit là. Si oui télécharge,
=> Si non vérifie que la version 1.9 soit là. Si oui télécharge,
=> Si non vérifie que la version 1.8 soit là, Si oui télécharge,
etc...
suite du script ...
Et disons que le fichier 2.0 ne soit pas là, il passe à la 1.9 et télécharge cette dernière est la. Il va alors passer à la "suite du script" sans vérifier les versions antérieur.
Merci à vous et bonne soirée.
Dernière modification par Fermerboy (Le 12/10/2008, à 17:30)
Hors ligne
#2 Le 11/10/2008, à 21:00
- tiky
Re : [Résolu][Bash]Vérifier qu'un fichier est téléchargeable
Il suffit d'essayer de le télécharger, si ça échoue, on passe au suivant.
until wget -t 1 url/archive-$version.ext
do
...
done
Dans la boucle, on diminue la valeur contenue par version jusqu'à obtenir un paquet téléchargeable. Si ce n'est pas possible, il faut mettre un break avec une condition sur la variable version afin de ne pas obtenir une boucle infinie.
Dernière modification par tiky (Le 11/10/2008, à 21:01)
Conseil d'expert: il vous faut un dentifrice adapté...
Hors ligne
#3 Le 11/10/2008, à 21:28
- Fermerboy
Re : [Résolu][Bash]Vérifier qu'un fichier est téléchargeable
Voila une partie de mon code
if [ "$ouinon" = "y" ] || [ "$ouinon" = "Y" ] || [ "$ouinon" = "yes" ] || [ "$ouinon" = "Yes" ] || [ "$ouinon" = "YES" ]; then
{
#Nous allons chercher la dernière version et décliner ainsi de suite jusqu'à trouver la bonne version.
"ton code"
}
elif [ "$ouinon" = "n" ] || [ "$ouinon" = "N" ] || [ "$ouinon" = "no" ] || [ "$ouinon" = "No" ]; then
{
echo "Installation annulée "
}
else
{
echo "Il faut taper Y ou N. Pas $ouinon, Veuillez relancer le script"
}
fi
Donc avec ton code je fais :
until wget -t 1 url/archive-$version.ext
do
wget -t l mon_lien.v2.0
wget -t l mon_lien.v1.9
wget -t l mon_lien.v1.8
wget -t l mon_lien.v1.7
done
Mais je n''ai pas très bien compris en fait ^^"
J'ai trouvé ces aides : ici et là.
Merci
Hors ligne
#4 Le 11/10/2008, à 21:58
- rniamo
Re : [Résolu][Bash]Vérifier qu'un fichier est téléchargeable
faut faire quelquechose du genre :
version=2.0
until blabla; do
version=$(($version-0.1))
done
(je suis pas un expert du bash donc la syntaxe est approchée)$version
edit : si les url ne sont pas de la forme : DébutVersionFin tu peux faire un tableau avec toutes les url et alors version devient l'indice du tableau (initialisé au dernier puis décrémenté dans le corps de la boucle.
Dernière modification par rniamo (Le 11/10/2008, à 22:00)
< Quelques un des mes programmes | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
\ ^__^
\ (o o)\_______
(___)\ )\
Hors ligne
#5 Le 12/10/2008, à 09:59
- atlante
Re : [Résolu][Bash]Vérifier qu'un fichier est téléchargeable
salut,
Voici ce qui devrait fonctionner:
retour=1000 # on initialise à autre chose que ce qu'on veut obtenir
for fichier in version3 version2 version1 # liste des verions à tester de DL
do
wget $fichier > /dev/null 2>&1 # on demande de DL le fichier sans renvoyer de message
retour=$? # on teste le code de retour: 0=OK, pas 0= pas OK (quelle qu'en soit la raison)
[ $retour = 0 ] && break # si code retour = 0, c'est qu'on a DL le fichier correctement, on sort de la boucle
done
[ $retour = 0 ] && echo "Fichier $fichier téléchargé" || echo "Pas de fichier téléchargeable" # Si au final on a 0 en code retour, c'est qu'on a DL un fichier, sinon, c'est qu'on a pas pu DL un seul des fichiers
Hors ligne
#6 Le 12/10/2008, à 13:20
- tiky
Re : [Résolu][Bash]Vérifier qu'un fichier est téléchargeable
Voila une partie de mon code
if [ "$ouinon" = "y" ] || [ "$ouinon" = "Y" ] || [ "$ouinon" = "yes" ] || [ "$ouinon" = "Yes" ] || [ "$ouinon" = "YES" ]; then { #Nous allons chercher la dernière version et décliner ainsi de suite jusqu'à trouver la bonne version. "ton code" } elif [ "$ouinon" = "n" ] || [ "$ouinon" = "N" ] || [ "$ouinon" = "no" ] || [ "$ouinon" = "No" ]; then { echo "Installation annulée " } else { echo "Il faut taper Y ou N. Pas $ouinon, Veuillez relancer le script" } fi
Donc avec ton code je fais :
until wget -t 1 url/archive-$version.ext do wget -t l mon_lien.v2.0 wget -t l mon_lien.v1.9 wget -t l mon_lien.v1.8 wget -t l mon_lien.v1.7 done
Mais je n''ai pas très bien compris en fait ^^"
J'ai trouvé ces aides : ici et là.
Merci
Non c'est pas comme ça qu'il faut utiliser le code que je t'ai donné. Until boucle tant que la commande ne s'est pas terminée avec succès. Donc tant qu'il n'a pas réussi à télécharger un paquet.
version=2.0
until wget -t 1 url/archive-$version
do
version=$(($version-0.1))
done
À adapter évidemment en fonction du nom de l'archive et du numéro de version le plus récent.
Conseil d'expert: il vous faut un dentifrice adapté...
Hors ligne
#7 Le 12/10/2008, à 13:36
- Fermerboy
Re : [Résolu][Bash]Vérifier qu'un fichier est téléchargeable
Bonjour,
Merci pour vos conseils
@Atlante : Ton script marche très bien, merci.
Maintenant j'ai un petit problème dans mon script.
Le but est de télécharger tout ce qu'il faut et de faire les installations pour wine.
Au début, si la personne dit "Oui", le script créé un fichier pour télécharger le fichier et le mettre dedans. J'ai donc essayer de faire en sorte que si le fichier existe, qu'il le supprime et le créé. Dans le cas ou l'user ne veut pas supprimer son dossier, on lui demande d'en créer un autre via le script.
Mais j'ai un petit problème d'érreur que je n'arrive pas à résoudre.
Voici mon code
#!/bin/bash
#Script d'installation et d'optimisation de Wine 0.1
#Installation de DirectX 9.0C avec Wine
#D'après le site http://howto.landure.fr
#http://howto.landure.fr/gnu-linux/installer-directx-9-0c-avec-wine
#Bonne installation.
clear
echo "######################### SCRIPT #########################"
echo ""
echo "Bonjour, nous allons télécharger la dernière version de wine et la placer dans votre dossier personnel"
echo -n "Continuer ? Y/N :"
read ouinon
#Initialisation de la condition d'installation ainsi que de la création du dossier de téléchargement.
if [ "$ouinon" = "y" ] || [ "$ouinon" = "Y" ] || [ "$ouinon" = "yes" ] || [ "$ouinon" = "Yes" ]; then
{
#Code pour créer le dossier
cd /home/$USER
#On vérifie que le dossier n'existe pas. Si c'est le cas, on le supprime avec l'accord de l'user.
if test -f wine_temp; then
{
echo "le fichier existe"
echo -n "Voulez vous supprimer le répertoire et le recréer ? Y/N :"
read OUINON
if [ "$OUINON" = "y" ] || [ "$OUINON" = "Y" ] || [ "$OUINON" = "yes" ] || [ "$OUINON" = "Yes" ]; then
{
rm wine_temp
mkdir wine_temp
cd wine_temp
echo "Fait"
}
elif [ "$OUINON" = "n" ] || [ "$OUINON" = "N" ] || [ "$OUINON" = "no" ] || [ "$OUINON" = "No" ]; then
{
echo "Dossier non supprimé"
echo -n "Voulez vous créer un dossier de téléchargement pour pouvoir stocker le fichier à télécharger ? Y/N :"
read OuiNon
if [ "$OuiNon" = "y" ] || [ "$OuiNon" = "Y" ] || [ "$OuiNon" = "yes" ] || [ "$OuiNon" = "Yes" ]; then
{
echo -n "Nom de votre dossier:"
read dossier
mkdir $dossier
cd $dossier
}
elif [ "$OuiNon" = "n" ] || [ "$OuiNon" = "N" ] || [ "$OuiNon" = "no" ] || [ "$OuiNon" = "No" ]; then
{
echo "Action annulée"
}
else
{
echo "Action annulée"
}
fi
}
else
{
echo "fait"
}
fi
else
{
mkdir wine_temp
cd wine_temp
}
}
fi
#Nous allons chercher la dernière version et décliner ainsi de suite jusqu'à trouver la bonne version.
echo "Veuillez patienter..."
retour=2 # on initialise à autre chose que ce qu'on veut obtenir
for fichier in 1.1.7.tar.bz2 1.1.6.tar.bz2 # liste des verions à tester de DL
do
wget http://prdownloads.sourceforge.net/wine/wine-$fichier > /dev/null 2>&1 # on demande de DL le fichier sans renvoyer de message
retour=$? # on teste le code de retour: 0=OK, pas 0= pas OK (quelle qu'en soit la raison)
[ $retour = 0 ] && break # si code retour = 0, c'est qu'on a DL le fichier correctement, on sort de la boucle
done
[ $retour = 0 ] && echo "Fichier $fichier téléchargé" || echo "Pas de fichier téléchargeable" # Si au final on a 0 en code retour, c'est qu'on a DL un fichier, sinon, c'est qu'on a pas pu DL un seul des fichiers
}
elif [ "$ouinon" = "n" ] || [ "$ouinon" = "N" ] || [ "$ouinon" = "no" ] || [ "$ouinon" = "No" ]; then
{
echo "Installation annulée "
}
else
{
echo "Il faut taper Y ou N! Pas $ouinon, Veuillez relancer le script"
}
fi
#Fin de la contion de téléchargement
#Début condition décompression et installation
Il me donne l'erreur suivant
script.sh: 63: Syntax error: "else" unexpected (expecting "}")
Mais je ne trouve pas
Je pense qu'on peut mieux l'écrire avec des fonctions/variables (notemment pour les OUINON, OuiNon etc... mais changement qui seront fait quand le script marchera bien), mais vu que c'est mon premier script
Dernière modification par Fermerboy (Le 12/10/2008, à 13:37)
Hors ligne
#8 Le 12/10/2008, à 15:14
- morphoneo69
Re : [Résolu][Bash]Vérifier qu'un fichier est téléchargeable
Il manque une } avant le else et doit avoir une autre erreur syntaxique après.
Dernière modification par morphoneo69 (Le 12/10/2008, à 15:22)
Hors ligne
#9 Le 12/10/2008, à 17:29
- Fermerboy
Re : [Résolu][Bash]Vérifier qu'un fichier est téléchargeable
Il manquait bien un } et dans la vérification du dossier, j'ai mis -d au lieu de -f.
Merci à vous.
Dernière modification par Fermerboy (Le 12/10/2008, à 17:29)
Hors ligne