Ligne de commande linux

Fermé
JyN - Modifié le 29 nov. 2019 à 13:54
 JyN - 29 nov. 2019 à 18:31
Bonjour,

j'essaye d’exécuter ce petit bout de programme dans le terminal de linux :

n=$1
if [ $n  -lt  10  ]
then
n="0"$n
fi
echo $n


Le problème c'est que lorsque je fais la commande :
chmod +x nom_du_fichier (Je rend le fichier exécutable)
Et que par la suite je fait :
bash nom_du_fichier

J'ai pour seul réponse :

nom_du_fichier : ligne 6 : [ : -lt : opérateur unaire attendu

Je ne sais pas du tout comment résoudre ce problème merci d'avance pour vos réponses.
A voir également:

2 réponses

jee pee Messages postés 39591 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 19 avril 2024 9 225
Modifié le 29 nov. 2019 à 13:13
Bonjour,

$1 est un paramètre passé au script, si tu lances
bash nom_du_fichier 
tu ne donnes pas de paramètre, donc le if échoue pour syntaxe incorrecte, il faudrait lancer par exemple
bash nom_du_fichier  2
pour passer 2 en paramètre

0
je ne comprend pas de quoi tu parles
désoler
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > JyN
29 nov. 2019 à 17:04
Le fichier non-exécutable :
$ ls -l
total 4
-rw-rw-r-- 1 jp jp 60 nov. 29 13:19 fich


Le contenu du fichier tel qu'il devrait être…
$ cat fich 
n="${1}"
if [ "${n}" -lt 10 ]
then
n="0${n}"
fi
echo "${n}"


Le script lancé avec un paramètre (5) :
$ bash fich 5
05


Le script lancé sans paramètre :
$ bash fich 
fich: ligne 2 : [: : nombre entier attendu comme expression


Tu comprends mieux ?
0
testGG Messages postés 3 Date d'inscription mercredi 9 octobre 2019 Statut Membre Dernière intervention 29 novembre 2019
Modifié le 29 nov. 2019 à 15:23
remplace ton $1 par $0, peut etre que tu comprendras ce dont jee pee parle (en l'état $1 n'existe pas, c'est pour ca qu'il y a une erreur)
0
ok je vais essayer merci
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
29 nov. 2019 à 14:14
Salut,

Deux, trois petites remarques concernant ta demande…
  • Il est toujours préférable d'entourer les variables par des quotes doubles à moins de savoir pourquoi on ne le fait pas. La remarque précédente est d'autant plus vraie lors d'un test ([ … "${var}" … ])
  • Il est aussi préférable d'entourer les variables par des accolades, surtout si on a besoin d'accoler des variables et des mots.
  • Il ne sert à rien de rendre un fichier de script exécutable si on le lance en le faisant précéder d'un shell.
  • Si on veut rendre un script shell (ou autre) exécutable et autonome, il faut désigner un shebang en début de script (
    #!/bin/bash
    ou
    #!/bin/zsh
    ou autres). À partir de là, le script pourra être lancé de cette façon :
    ./le_script.sh
    .

0
ok merci pour t'es conseilles je vais y remédier
0