Avis à ceux qui connaissent mieux les commandes Linux que moi - qui commence juste à m'y mettre -.
Je souhaite mettre en place une routine qui m'aiderait lors de récupération de contenus sur le Web. Problème, je ne connais pas les commandes qui correspondraient à ce que je voudrais, à savoir qu'il y a un choix OU deux choix OU trois choix parmi les trois possibles.
Spoiler :
"Quel(ls) est/sont votre/vos choix parmi la liste suivante : anatole[1] betty[2] castor[3] ?"
"Vous avez choisi les programmes suivants :"
Choix 1
do
Choix 2
do
choix 3
do
Erreur : ce choix n'est pas disponible
"Programme terminé à [YYYYMMAA-HHMM]"
Merci par avance aux éventuelles réponses.
Diagnostiqué TSA en octobre 2020. Conjointe diagnostiquée en janvier 2021.
SourisGrognon a écrit : ↑mercredi 20 décembre 2023 à 23:47
Avis à ceux qui connaissent mieux les commandes Linux que moi - qui commence juste à m'y mettre -.
Je souhaite mettre en place une routine qui m'aiderait lors de récupération de contenus sur le Web. Problème, je ne connais pas les commandes qui correspondraient à ce que je voudrais, à savoir qu'il y a un choix OU deux choix OU trois choix parmi les trois possibles.
Spoiler :
"Quel(ls) est/sont votre/vos choix parmi la liste suivante : anatole[1] betty[2] castor[3] ?"
"Vous avez choisi les programmes suivants :"
Choix 1
do
Choix 2
do
choix 3
do
Erreur : ce choix n'est pas disponible
"Programme terminé à [YYYYMMAA-HHMM]"
Merci par avance aux éventuelles réponses.
Tu parles bien du choix du traitement que tu ferais du contenu une fois récupéré sur le web, et non de la récupération en-elle meme (faisable avec curl notamment) ? Ca pourrait bien de le mettre dans un script sh pour lire une entrée que tu passerais alors pour savoir quoi faire.
Tu voudrais pouvoir faire plusieurs choix en même temps, c'est ca ? Ca me fait penser à des histoires de masque en vérifiant pour chaque bit qui correspondra à une option de ton programme s'il est à 1 ou pas pour lancer l'option en question : par exemple, si on dit que tes 3 choix sont A, B et C, si tu passes le nombre 6 = 110 en binaire, ca correspondrait à faire les choix A et B mais pas le C
Diagnostiqué TSA sans déficience intellectuelle le 12/08/2022
Oh là, tu pars un peu loin par rapport à ce que j'avais pensé au départ.
En fait il s'agirait d'un script à choix multiple basé sur yt-dlp.
Faire un script avec un seul choix, j'ai réussi à faire, avec des boucles "if". En revanche, dans le cas de figure où il y a plus d'un cas (dont, finalement, plusieurs arguments d'entrée), je veux pouvoir exécuter les sous-programmes choisis.
Voilà, je ne sais pas si c'est plus clair...
Merci en tout cas !
Diagnostiqué TSA en octobre 2020. Conjointe diagnostiquée en janvier 2021.
SourisGrognon a écrit : ↑jeudi 21 décembre 2023 à 0:18
Oh là, tu pars un peu loin par rapport à ce que j'avais pensé au départ.
En fait il s'agirait d'un script à choix multiple basé sur yt-dlp.
Faire un script avec un seul choix, j'ai réussi à faire, avec des boucles "if". En revanche, dans le cas de figure où il y a plus d'un cas (dont, finalement, plusieurs arguments d'entrée), je veux pouvoir exécuter les sous-programmes choisis.
Voilà, je ne sais pas si c'est plus clair...
Merci en tout cas !
Salut SourisGrognon !
Dans le cadre du développement d'un script shell visant à implémenter une logique de sélection multiple, l'usage de structures conditionnelles `if` se révèle souvent inadéquat et peut conduire à des complexités algorithmiques non négligeables. Les raisons sous-jacentes sont multiples :
- Monolithisme des Structures Conditionnelles :
Les structures `if` sont intrinsèquement conçues pour évaluer des conditions singulières et linéaires. Lorsqu'on tente de les adapter à un contexte de choix multiples, elles requièrent l'implémentation de toutes les permutations possibles des choix, engendrant une complexité exponentielle et une lourdeur dans le code, peu propice à la maintenance et à l'évolutivité du script.
- Complexité Algorithmique : L'élaboration de conditions englobant toutes les combinaisons possibles des choix multiples s'avère être une tâche ardue, particulièrement lorsque le nombre de choix augmente. Cela induit une complexité algorithmique accrue, susceptible de générer des erreurs d'implémentation et de logique.
- Rigidité Structurelle : L'emploi de structures `if` dans ce contexte manque de flexibilité, notamment en termes de prise en charge d'entrées variables et dynamiques. Cette rigidité structurelle entrave l'adaptabilité du script à des scénarios où le nombre de choix peut fluctuer.
- Défi de la Gestion des Entrées : Le traitement d'entrées multiples au sein d'une unique instruction `if` nécessite une logique de séparation et de validation complexe, qui dépasse souvent les capacités inhérentes à cette structure conditionnelle.
- Probabilité d'Erreurs de Syntaxe et Logiques : L'architecture même des instructions `if` dans un tel scénario est sujette à des erreurs de syntaxe et des défaillances logiques, en raison de la nécessité de couvrir un spectre étendu de conditions et de cas.
En conclusion, il est judicieux de privilégier l'utilisation de structures telles que `case` dans une boucle `for` ou `while`, qui offrent une plus grande souplesse dans le traitement des sélections multiples. Cette approche permet d'évaluer chaque choix de manière isolée et structurée, favorisant ainsi un script plus robuste, évolutif et facilement « maintenable ».
Je te présente ci-après un exemple de script Shell, lequel tu pourras adapter selon tes impératifs spécifiques. J'ai opéré sous l'hypothèse que ton intention était de mettre en œuvre un script destiné au téléchargement de une, deux ou trois vidéos. Si ton objectif diffère de cette hypothèse, je te prie d'accepter mes excuses pour n'avoir pas entièrement saisi la nature de ta requête :
#!/bin/bash
# Définissez ici les URLs des vidéos
URL_ANATOLE="url_video_anatole"
URL_BETTY="url_video_betty"
URL_CASTOR="url_video_castor"
echo "Quel(s) est/sont votre/vos choix parmi la liste suivante : anatole[1] betty[2] castor[3] ?"
read -p "Entrez votre/vos choix (par exemple, 1 pour anatole, 12 pour anatole et betty, etc.) : " choix
for i in $(seq 1 ${#choix}); do
char=${choix:$i-1:1}
case $char in
1)
echo "Téléchargement de la vidéo anatole..."
yt-dlp $URL_ANATOLE
;;
2)
echo "Téléchargement de la vidéo betty..."
yt-dlp $URL_BETTY
;;
3)
echo "Téléchargement de la vidéo castor..."
yt-dlp $URL_CASTOR
;;
*)
echo "Choix invalide: $char"
;;
esac
done
Afin de préserver l’essence même de ton projet initial, je te soumets un script conçu pour t’octroyer la latitude de sélectionner une ou plusieurs options parmi les trois proposées (à savoir anatole, betty et castor). À cette fin, il est judicieux d’employer une boucle, laquelle se chargera d’analyser méticuleusement chaque caractère saisi :
#!/bin/bash
echo "Quel(s) est/sont votre/vos choix parmi la liste suivante : anatole[1] betty[2] castor[3] ?"
read -p "Entrez votre/vos choix (par exemple, 1 pour anatole, 12 pour anatole et betty, etc.) : " choix
for i in $(seq 1 ${#choix}); do
char=${choix:$i-1:1}
case $char in
1)
echo "Vous avez choisi le programme anatole."
# Commandes pour anatole
;;
2)
echo "Vous avez choisi le programme betty."
# Commandes pour betty
;;
3)
echo "Vous avez choisi le programme castor."
# Commandes pour castor
;;
*)
echo "Choix invalide: $char"
;;
esac
done
Au sein de ce script, il est permis à l’utilisateur de saisir une séquence numérique, tel un agencement de chiffres – par exemple, ‘12’ pour désigner simultanément anatole et betty. Le script se déploie alors en parcourant scrupuleusement chaque caractère individuel de la chaîne de caractères introduite, procédant à l’exécution des instructions spécifiques liées à chaque choix effectué.
Pour capturer l’entrée utilisateur, le script emploie la commande read, et il s’ensuit l’usage d’une boucle for pour l’itération minutieuse sur chaque caractère de ladite entrée. La structure case est stratégiquement mise à contribution afin d’orchestrer l’exécution de commandes adéquates, correspondant au caractère courant traité dans la boucle.
Il est également envisageable de réaliser cette opération au moyen du langage Python, dans l’éventualité où cela s’alignerait avec tes préférences ou exigences techniques.
Spoiler :
Un petit dernier qui confère à l'utilisateur la capacité de saisir une série indéterminée d'URLs et, subséquemment, d'initier le téléchargement de l'ensemble des vidéos correspondantes.
L'utilisateur est invité à introduire les URLs de manière séquentielle, et à signaler la complétude de cette opération par l'entrée d'un mot-clé spécifique, ici 'fin'. Postérieurement à cette phase de saisie, le script entreprend de traiter chacune des URLs accumulées au sein d'une structure de données tabulaire.
Le déroulement du script s'articule comme suit :
1. Instauration d'un tableau pour le stockage consigné des URLs.
2. Acquisition des URLs par le biais d'interactions successives avec l'utilisateur, jusqu'à l'indication de la fin de la saisie.
3. Vérification préalable visant à s'assurer de la présence d'au moins une URL dans le tableau.
4. Itération sur l'ensemble des URLs mémorisées, accompagnée du lancement du téléchargement de chaque vidéo par l'intermédiaire de la commande `yt-dlp`.
```bash
#!/bin/bash
# Création d'un tableau pour stocker les URLs
declare -a url_list
# Obtenir les URLs de l'utilisateur
while true; do
read -p "Entrez l'URL de la vidéo à télécharger (ou tapez 'fin' pour terminer) : " url
if [[ $url == "fin" ]]; then
break
fi
url_list+=("$url")
done
# Vérifier si aucune URL n'a été saisie
if [ ${#url_list[@]} -eq 0 ]; then
echo "Aucune URL saisie. Aucun téléchargement à effectuer."
exit 1
fi
# Télécharger chaque vidéo
for url in "${url_list[@]}"; do
echo "Téléchargement de la vidéo : $url"
yt-dlp "$url"
done
echo "Tous les téléchargements sont terminés."
```
ASD (DSM-5)
Catch Me If You Scan or Buy Me a Phish & Chips.
ἕν οἶδα ὅτι οὐδὲν οἶδα. Σωκράτης
SourisGrognon a écrit : ↑jeudi 21 décembre 2023 à 0:18
Oh là, tu pars un peu loin par rapport à ce que j'avais pensé au départ.
En fait il s'agirait d'un script à choix multiple basé sur yt-dlp.
Faire un script avec un seul choix, j'ai réussi à faire, avec des boucles "if". En revanche, dans le cas de figure où il y a plus d'un cas (dont, finalement, plusieurs arguments d'entrée), je veux pouvoir exécuter les sous-programmes choisis.
Voilà, je ne sais pas si c'est plus clair...
Merci en tout cas !
Salut SourisGrognon !
Dans le cadre du développement d'un script shell visant à implémenter une logique de sélection multiple, l'usage de structures conditionnelles `if` se révèle souvent inadéquat et peut conduire à des complexités algorithmiques non négligeables. Les raisons sous-jacentes sont multiples :
- Monolithisme des Structures Conditionnelles :
Les structures `if` sont intrinsèquement conçues pour évaluer des conditions singulières et linéaires. Lorsqu'on tente de les adapter à un contexte de choix multiples, elles requièrent l'implémentation de toutes les permutations possibles des choix, engendrant une complexité exponentielle et une lourdeur dans le code, peu propice à la maintenance et à l'évolutivité du script.
- Complexité Algorithmique : L'élaboration de conditions englobant toutes les combinaisons possibles des choix multiples s'avère être une tâche ardue, particulièrement lorsque le nombre de choix augmente. Cela induit une complexité algorithmique accrue, susceptible de générer des erreurs d'implémentation et de logique.
- Rigidité Structurelle : L'emploi de structures `if` dans ce contexte manque de flexibilité, notamment en termes de prise en charge d'entrées variables et dynamiques. Cette rigidité structurelle entrave l'adaptabilité du script à des scénarios où le nombre de choix peut fluctuer.
- Défi de la Gestion des Entrées : Le traitement d'entrées multiples au sein d'une unique instruction `if` nécessite une logique de séparation et de validation complexe, qui dépasse souvent les capacités inhérentes à cette structure conditionnelle.
- Probabilité d'Erreurs de Syntaxe et Logiques : L'architecture même des instructions `if` dans un tel scénario est sujette à des erreurs de syntaxe et des défaillances logiques, en raison de la nécessité de couvrir un spectre étendu de conditions et de cas.
En conclusion, il est judicieux de privilégier l'utilisation de structures telles que `case` dans une boucle `for` ou `while`, qui offrent une plus grande souplesse dans le traitement des sélections multiples. Cette approche permet d'évaluer chaque choix de manière isolée et structurée, favorisant ainsi un script plus robuste, évolutif et facilement « maintenable ».
Je te présente ci-après un exemple de script Shell, lequel tu pourras adapter selon tes impératifs spécifiques. J'ai opéré sous l'hypothèse que ton intention était de mettre en œuvre un script destiné au téléchargement de une, deux ou trois vidéos. Si ton objectif diffère de cette hypothèse, je te prie d'accepter mes excuses pour n'avoir pas entièrement saisi la nature de ta requête :
#!/bin/bash
# Définissez ici les URLs des vidéos
URL_ANATOLE="url_video_anatole"
URL_BETTY="url_video_betty"
URL_CASTOR="url_video_castor"
echo "Quel(s) est/sont votre/vos choix parmi la liste suivante : anatole[1] betty[2] castor[3] ?"
read -p "Entrez votre/vos choix (par exemple, 1 pour anatole, 12 pour anatole et betty, etc.) : " choix
for i in $(seq 1 ${#choix}); do
char=${choix:$i-1:1}
case $char in
1)
echo "Téléchargement de la vidéo anatole..."
yt-dlp $URL_ANATOLE
;;
2)
echo "Téléchargement de la vidéo betty..."
yt-dlp $URL_BETTY
;;
3)
echo "Téléchargement de la vidéo castor..."
yt-dlp $URL_CASTOR
;;
*)
echo "Choix invalide: $char"
;;
esac
done
Afin de préserver l’essence même de ton projet initial, je te soumets un script conçu pour t’octroyer la latitude de sélectionner une ou plusieurs options parmi les trois proposées (à savoir anatole, betty et castor). À cette fin, il est judicieux d’employer une boucle, laquelle se chargera d’analyser méticuleusement chaque caractère saisi :
#!/bin/bash
echo "Quel(s) est/sont votre/vos choix parmi la liste suivante : anatole[1] betty[2] castor[3] ?"
read -p "Entrez votre/vos choix (par exemple, 1 pour anatole, 12 pour anatole et betty, etc.) : " choix
for i in $(seq 1 ${#choix}); do
char=${choix:$i-1:1}
case $char in
1)
echo "Vous avez choisi le programme anatole."
# Commandes pour anatole
;;
2)
echo "Vous avez choisi le programme betty."
# Commandes pour betty
;;
3)
echo "Vous avez choisi le programme castor."
# Commandes pour castor
;;
*)
echo "Choix invalide: $char"
;;
esac
done
Au sein de ce script, il est permis à l’utilisateur de saisir une séquence numérique, tel un agencement de chiffres – par exemple, ‘12’ pour désigner simultanément anatole et betty. Le script se déploie alors en parcourant scrupuleusement chaque caractère individuel de la chaîne de caractères introduite, procédant à l’exécution des instructions spécifiques liées à chaque choix effectué.
Pour capturer l’entrée utilisateur, le script emploie la commande read, et il s’ensuit l’usage d’une boucle for pour l’itération minutieuse sur chaque caractère de ladite entrée. La structure case est stratégiquement mise à contribution afin d’orchestrer l’exécution de commandes adéquates, correspondant au caractère courant traité dans la boucle.
Il est également envisageable de réaliser cette opération au moyen du langage Python, dans l’éventualité où cela s’alignerait avec tes préférences ou exigences techniques.
Spoiler :
Un petit dernier qui confère à l'utilisateur la capacité de saisir une série indéterminée d'URLs et, subséquemment, d'initier le téléchargement de l'ensemble des vidéos correspondantes.
L'utilisateur est invité à introduire les URLs de manière séquentielle, et à signaler la complétude de cette opération par l'entrée d'un mot-clé spécifique, ici 'fin'. Postérieurement à cette phase de saisie, le script entreprend de traiter chacune des URLs accumulées au sein d'une structure de données tabulaire.
Le déroulement du script s'articule comme suit :
1. Instauration d'un tableau pour le stockage consigné des URLs.
2. Acquisition des URLs par le biais d'interactions successives avec l'utilisateur, jusqu'à l'indication de la fin de la saisie.
3. Vérification préalable visant à s'assurer de la présence d'au moins une URL dans le tableau.
4. Itération sur l'ensemble des URLs mémorisées, accompagnée du lancement du téléchargement de chaque vidéo par l'intermédiaire de la commande `yt-dlp`.
```bash
#!/bin/bash
# Création d'un tableau pour stocker les URLs
declare -a url_list
# Obtenir les URLs de l'utilisateur
while true; do
read -p "Entrez l'URL de la vidéo à télécharger (ou tapez 'fin' pour terminer) : " url
if [[ $url == "fin" ]]; then
break
fi
url_list+=("$url")
done
# Vérifier si aucune URL n'a été saisie
if [ ${#url_list[@]} -eq 0 ]; then
echo "Aucune URL saisie. Aucun téléchargement à effectuer."
exit 1
fi
# Télécharger chaque vidéo
for url in "${url_list[@]}"; do
echo "Téléchargement de la vidéo : $url"
yt-dlp "$url"
done
echo "Tous les téléchargements sont terminés."
```
Merci beaucoup C3PO. C'est exactement ce dont j'avais besoin !
Cependant, je pensais que c'était R2D2 le roi de la programmation ?
Sinon, voici le résultat partiel de ton travail avec mes quelques lignes de code :
Spoiler :
Merci aussi à Lucius pour son MP complétant bien ce script
Je voulais éditer mon précédent message mais ça risquait d'entraîner plus de confusion que d'éclaircissement...
Merci pour les tuyaux, Tugdual, j'ai fouillé un peu et j'ai finalement trouvé ce qui correspondait à tes conseils.
Merci à vous tous !
Spoiler :
Curiouser a bien fait de me conseiller de soumettre ici mon problème (et comme ça, je l'ai laissée tranquille elle aussi ).
Diagnostiqué TSA en octobre 2020. Conjointe diagnostiquée en janvier 2021.
SourisGrognon a écrit : ↑jeudi 21 décembre 2023 à 21:59
Curiouser a bien fait de me conseiller de soumettre ici mon problème (et comme ça, je l'ai laissée tranquille elle aussi ).
Ahum, c'est un peu éloigné de la réalité... "Curiouser, j'ai besoin d'aide, comment je peux éditer mon message ? Curiouser, s'il te plaît, tu veux bien écrire ce dernier message sur ton ordinateur, j'ai la flemme de me reconnecter ? Curiouser, va t'occuper de la machine à laver qui vient de finir" - ah, non, ça c'est moi qui viens de le dire à SourisGrognon il y a quelques minutes -
Diagnostiquée TSA en janvier 2021. Conjoint diagnostiqué TSA en octobre 2020.