Bonjour,
Mon script ne prend pas en compte mes conditions :
Peu importe ce que je rentre pour la variable "ficenv", il va me dérouler le script en entier..
Pouvez vous m'aider svp?
Merci![]()
Bonjour,
Mon script ne prend pas en compte mes conditions :
Peu importe ce que je rentre pour la variable "ficenv", il va me dérouler le script en entier..
Pouvez vous m'aider svp?
Merci![]()
Bonjour
1) Sur le forum, privilégie le copier/coller de ton code entre 2 balises "code"; plutôt que la capture d'écran.
2) Il faut lire et nous transmettre les messages d'erreur.
3) Il y a une commande entre le if condition et le then. Ceci est une erreur. N'est-ce pas ?
4) Tu devrais mettre tes variables texte entre double quotes. Sinon, un utilisateur entrant un espace dans sa réponse va faire hurler ton script.
5) echo "$message"; read toto se résume par
Code : Sélectionner tout - Visualiser dans une fenêtre à part if [ "$ficenv" = "v" ]; then6) Si tu veux une seule lettre en entrée du "read", tu peux utiliser l'option "-n"
Code : Sélectionner tout - Visualiser dans une fenêtre à part read -p "message" toto
Cela n'attend plus le retour chariot.
Code : Sélectionner tout - Visualiser dans une fenêtre à part read -n 1 -p "f ou v ?" ficenv
7) Le shebang doit être sur la première ligne. Sinon, ce n'est qu'un commentaire.
Merci pour ton aide.
Le shebang est bien sur la première ligne, c'est juste l'affichage qui est fait comme ça..
Quelle est l’importance de tes ";" dans tes exemples?
Voilà ce que j'ai modifié du coup :
Et voilà mon message d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #!/bin/bash echo "Saisir l'option que vous désirez, f pour fichier, v pour variable" read ficenv echo "Saisir votre chaine de caractère, si vous avez choisit f, entrez le chem$ read chaine #debut du 1er cas avec env if [ "$ficenv" = "v" ] then echo "Voici les résultats dans la commande env" env | grep -n $chaine echo "Voici les résultats dans la commande set" set | grep -n $chaine #debut du 2eme cas avec fichier elif [ "$ficenv" = "f" ] then ps r $chaine else echo "Il faut rentrer f ou v" fi
scriptlinux.sh: ligne 18: erreur de syntaxe près du symbole inattendu « elif »
scriptlinux.sh: ligne 18: `elif [ "$ficenv" = "f" ]'
Je débute tout juste en script, donc je fais des erreurs bêtes aha
Merci encore
Les points virgules remplacent le fait d'aller à la ligne.
Dans ton code, la commande "echo" renvoie toujours vrai, donc le code juste après "then" est toujours exécuté, quelque soit le code entre "if" et "echo".
Dans ton nouveau code, il manque un ";" avant le then. (Ou un retour à la ligne, donc)
Merci beaucoup, ça fonctionne comme je le voulais![]()
Pour tester la valeur de $ficenv tu aurais pu utiliser l'opérateur case plutôt qu'une série de if..elif..else![]()
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous,
N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton
et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.
C'est noté, je vais me pencher un peu plus là dessus![]()
Bonjour
Grace à vous, voici comment à avancer mon exercice !
Pour la deuxième partie du script, je dois faire en sorte qu'il exécute un fichier exécutable (et qu'il affiche les informations du processus) avec le chemin spécifié dans la commande : nomduscript.sh f <chemin>
Pour les informations, je pensais utiliser la commande "ps", cela dit je ne sais pas trop comment l'utiliser, ni trop comment lancer l’exécutable..
Si vous pouviez me mettre sur la voie ce serait parfait !
Merci encore à vous.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 #Vérification du nb de paramètres fournit par l'utilisateur case $# in 0) echo "Vous devez spécifier des paramètres" echo "Syntaxe : v <chaine de caractère> ou f <chemin du fichier>" echo "Si vous choisissez v, le script cherchera votre chaine de caractère dans la commande set & env" echo "Si vous choisissez f, le script exécutera le fichier spécifier par votre chemin et affichera ses informations";; 1) echo "Il manque un paramètre";; 2) echo "Votre script va s'éxécuter";; *) echo "Vous avez renseigné trop de paramètres" esac if [ "$1" = "v" ] then echo echo "Voici les résultats dans la commande env" env | grep -n $2 echo echo "Voici les résultats dans la commande set" set | grep -n $2 #début du script pour le cas 2 elif [ "$1" = "f" ] then echo "script en cours de création" else echo "Il faut saisir l'option f ou v" fi
Exemple :Note bien l'utilisation de $!.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 $ ps -p 5544 -o pid,uname,pcpu,pmem,comm PID USER %CPU %MEM COMMAND 5544 flodelarab 3.7 2.4 firefox-esr $ sleep 10 & ps -p $! -o pid,uname,pcpu,pmem,comm [1] 7873 PID USER %CPU %MEM COMMAND 7873 florian 0.0 0.0 sleep
Pour plus d'infos :
D'autre part, pour tout fichier, il suffit de l'appeler, s'il a les droits d'exécution.
Code : Sélectionner tout - Visualiser dans une fenêtre à part man bash
Merci beaucoup.
Je test ça et te fais un retour :p
Modification : Tout est ok ! Merci encore !
Partager