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 14/05/2026, à 18:21

fnux

[résolu] Comment tester les arguments passés à un script bash ?

Bonjour,

je n'arrive pas à récupérer un argument passé à un simple script bash.

#!/bin/bash
# Hello,
#
# I try to get the argument given to this test bash script when started with
# and without a redirection to the "test-arg.txt" file using the commands
# [./test_arg.sh] then [./test_arg.sh > test-arg.txt].
#
# How can I get the response 'test_arg.txt' into the console (or in the file) 
# Vs. what I only get: 'test_arg.sh' whatever I use the redirection file or not!
#
# Where am I wrong ?
#
# TIA for your help.
#
arg="$0"
if [ "$arg" != "" ]
  then
    echo $arg
  else
    echo "no argument!"
fi

Voici ce que cela produit à l'exécution de ces deux commandes :

./test_arg.sh qui répond dans la console:

fnux@raspberrypi:~/wrk3-bookworm 
$ ./test_arg.sh
./test_arg.sh
fnux@raspberrypi:~/wrk3-bookworm $ 

./test_arg.sh >test-arg.txt qui répond dans le fichier:

fnux@raspberrypi:~/wrk3-bookworm 
$ ./test_arg.sh >test-arg.txt
fnux@raspberrypi:~/wrk3-bookworm $ 

fichier test-arg.txt:

./test_arg.sh

Merci d'avance de votre aide.

Dernière modification par fnux (Le 15/05/2026, à 00:55)


N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately

Hors ligne

#2 Le 14/05/2026, à 18:48

Watael

Re : [résolu] Comment tester les arguments passés à un script bash ?

salut,

à aucun moment tu ne passes un argument au script.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 14/05/2026, à 19:16

diesel

Re : [résolu] Comment tester les arguments passés à un script bash ?

Ben..., "$0", c'est la commande qui est lancée.

Donc, si tu lances "./test_arg.sh", il te répond "./test_arg.sh", ce qui est normal.

Maintenant, si tu veux lancer "./test_arg.sh toto" et que ton script te renvoie "toto", il te faut t'intéresser à "$1".

Amicalement.

Jean-Marie


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#4 Le 14/05/2026, à 20:50

ClarusAD67

Re : [résolu] Comment tester les arguments passés à un script bash ?

En l'état, le script ne devrait-il pas retourner : « no argument! » ?
(puisque justement : rien ne lui est passé)

Dernière modification par ClarusAD67 (Le 14/05/2026, à 20:51)

Hors ligne

#5 Le 14/05/2026, à 20:57

Watael

Re : [résolu] Comment tester les arguments passés à un script bash ?

puisque $0 (aka $arg) n'est pas vide, non.

EDIT:
pour tester que des arguments sont passés au script, ce serait plutôt

if (( $# ))
then
    echo "il y a $# argument(s)"
else
    echo "aucun argument"
fi

Dernière modification par Watael (Le 14/05/2026, à 21:16)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 14/05/2026, à 23:07

fnux

Re : [résolu] Comment tester les arguments passés à un script bash ?

Bonsoir Watael,

Watael a écrit :

salut,
à aucun moment tu ne passes un argument au script.

dans la commande [ ./test_arg.sh >test-arg.txt ] le ">test-arg.txt" n'est-il pas un argument ? sad

Si ce n'est pas le cas, comment puis-je récupérer cette donnée ? wink

Bonsoir Jean-Marie,

diesel a écrit :

Ben..., "$0", c'est la commande qui est lancée.
Donc, si tu lances "./test_arg.sh", il te répond "./test_arg.sh", ce qui est normal.
Maintenant, si tu veux lancer "./test_arg.sh toto" et que ton script te renvoie "toto", il te faut t'intéresser à "$1".
Amicalement.
Jean-Marie

j'ai essayé avec "$1" et même avec "$@"  mais cela ne résoud pas mon problème car manifestement, ce n'est pas la bonne méthode ! hmm

Si vous savez comment faire, merci d'avance car je suis preneur. wink

Merci à vous deux.

Cheers.


N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately

Hors ligne

#7 Le 14/05/2026, à 23:14

Watael

Re : [résolu] Comment tester les arguments passés à un script bash ?

le fichier destination n'est pas un argument du script, c'est un argument de la redirection, dans le terminal.
tu ne peux pas récupérer cette donnée.

ce que tu peux faire c'est passer le nom du fichier destination en argument au script et y faire la redirection :

#!/bin/bash

if (( $# ))
then
    #TODO: vérifier que $1 est composé d'un chemin (tout ce qui est avant le dernier slash, ou qu'il n'y en a pas) et d'un nom de fichier qui n'est pas un répertoire
    echo blabla >"$1"
else
    echo no args
fi

Dernière modification par Watael (Le 14/05/2026, à 23:15)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#8 Le 15/05/2026, à 00:54

fnux

Re : [résolu] Comment tester les arguments passés à un script bash ?

Watael a écrit :

le fichier destination n'est pas un argument du script, c'est un argument de la redirection, dans le terminal.
tu ne peux pas récupérer cette donnée.

ce que tu peux faire c'est passer le nom du fichier destination en argument au script et y faire la redirection :

#!/bin/bash

if (( $# ))
then
    #TODO: vérifier que $1 est composé d'un chemin (tout ce qui est avant le dernier slash, ou qu'il n'y en a pas) et d'un nom de fichier qui n'est pas un répertoire
    echo blabla >"$1"
else
    echo no args
fi

Merci, je pense que je vais y arriver.

Vu l'heure, bonne nuit.

Je marque [résolu]


N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately

Hors ligne

#9 Le 15/05/2026, à 02:23

erresse

Re : [résolu] Comment tester les arguments passés à un script bash ?

Bonjour,
Il me semble que dès le message#3 de diesel, la solution était trouvée et l'explication qu'il en a donnée parfaitement claire.
Inutile de compliquer davantage un problème qui dépasse déjà la compréhension du demandeur pour un simple "echo"...
Et d'ailleurs, n'oublions pas que pour mieux maitriser son sujet, RTFM est la première étape !


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#10 Le 15/05/2026, à 02:43

Watael

Re : [résolu] Comment tester les arguments passés à un script bash ?

où vois-tu une complication* ? le " $# ou le TODO ?

--
*que ne comprends-tu pas ? lol


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 15/05/2026, à 03:35

erresse

Re : [résolu] Comment tester les arguments passés à un script bash ?

fnux a-t-il tout compris, lui ?
Cela dit sans renier les avis que tu laisses, Watael, qui sont toujours avisés même s'ils sont souvent pointus, vu ta connaissance du shell.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#12 Le 15/05/2026, à 03:54

Watael

Re : [résolu] Comment tester les arguments passés à un script bash ?

je crois avoir été assez clair :
aucun argument n'est passé au script
ce que fnux a cru être un argument du script est un argument de la redirection* dans le terminal.

--
* en fait, une autre commande que le script.

commandeScript [arguments du script OU pas d'argument] cmdRedirection argumentIndispensable2laRedirection

Dernière modification par Watael (Le 15/05/2026, à 03:56)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#13 Le 15/05/2026, à 13:54

diesel

Re : [résolu] Comment tester les arguments passés à un script bash ?

fnux a écrit :

Bonsoir Watael,

Watael a écrit :

salut,
à aucun moment tu ne passes un argument au script.

dans la commande [ ./test_arg.sh >test-arg.txt ] le ">test-arg.txt" n'est-il pas un argument ? sad

Quand tu entres la ligne "./test_arg.sh >test-arg.txt" dans un terminal, l'instance bash attachée au terminal va d'abord interpréter le contenu de la ligne.

Cette ligne veut dire : "Il va falloir lancer l'interprétation d'un script contenu dans le fichier ./test_arg.sh auquel (dans le cas présent) aucun argument n'est associé et rediriger la sortie de son exécution vers le fichier test_arg.txt". Pour qu'il y ait un argument, il aurait fallu entrer par exemple "./test_arg.sh toto >test-arg.txt". "toto" aurait été le premier argument (dans $1).

A ce moment, l'exécution de ton script n'a pas encore commencé et l'instance bash attachée au terminal met en place la redirection. Une fois la redirection mise en place, bash "oublie" la partie ">test-arg.txt" de la commande.

Ensuite, l'instance bash attachée au terminal remplit les variables $0 avec "./test_arg.sh" et les éventuelles variables $1, $2... avec les éventuels arguments passée à la commande.

Puis, une nouvelle instance bash est lancée avec les variables $0, $1,$2... A partir de $0, elle va trouver le fichier à exécuter puis dérouler l'exécution ligne par ligne du fichier.

Voilà (un peu schématiquement) comment ça se passe.

Amicalement.

Jean-Marie

P.S. C'est de façon un peu plus développée ce que Watael a écrit juste au dessus.

Dernière modification par diesel (Le 15/05/2026, à 13:59)


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne