l'évaluation arithmétique de zéro retourne faux !
un résultat autre que zéro sera vrai.
et il y a un un ; en trop.

l'évaluation arithmétique de zéro retourne faux !
un résultat autre que zéro sera vrai.
et il y a un un ; en trop.
C'est ce que j'observe aussi sous ksh:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $ if (( 0 )) ; then echo "0 est vrai" ; else echo "0 est faux" ; fi 0 est faux $ if (( 2 )) ; then echo "2 est vrai" ; else echo "2 est faux" ; fi 2 est vraiou 2... voire 4 !et il y a un un ; en trop.
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]

j'ai bien précisé «l'évaluation arithmétique» de zéro.
cela peut effectivement prêter à confusion.![]()
non mais ça va je ne suis pas bon en math mais côté dev ça peut aller t'inquiète(bon pas du coté shell ok ok
)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 19:20 viduc@NEOTOKYO ~ % ls -l /bin/bash -rwxr-xr-x 1 root root 937K sept. 19 15:40 /bin/bash*
Règle de base 1 : Ne jamais faire une réponse sans avoir les moyens de la tester.
Règle de base 2 : Ne jamais faire une réponse étant dérangé plusieurs fois dans sa rédaction.
La bonne réponse estJe présente toutes mes excuses aux lecteurs pour cette réponse fausse et qui pourrait induire en erreur.2 est vrai
0 est faux
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.
Mouais. Il semble que tu aies créé un alias de "ls" sur "ls -h" car t'as la taille en k (accessoirement mon bash, lui, pèse 793k et pas 937k => erreur de recopie ???)
Toutefois cela ne change rien au schmilblik. Tu as un vrai bash mais il n'accepte pas certaines instructions pourtant correctes en bash. Moi je reste sec...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
erreur de copie non...
par contre pour info je suis sous Mint, je ne sais pas si il y a des alias de créé à la base ...?
Test réalisé sur un Mint 14 Nadia fraichement installée:
Autre test réalisé sur Mint 14 Nadia :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 idriss@ThinkPad-T420 ~ $ ls -l /bin/bash -rwxr-xr-x 1 root root 920796 sept. 19 15:42 /bin/bash
Quelque chose m'échappe
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 idriss@ThinkPad-T420 ~ $ cat test.sh #!/bin/bash echo "Acceptez vous la licence d'utilisation (procéder à l'installation)? (Y,n)" read reponse if [ "$reponse" == "" ] || [ "$reponse" == "Y" ] || [ "$reponse" == "y" ] then echo "Lancement de l'installation" else echo "Terminé" fi idriss@ThinkPad-T420 ~ $ ./test.sh Acceptez vous la licence d'utilisation (procéder à l'installation)? (Y,n) Lancement de l'installation neumann@neumann-ThinkPad-T420 ~ $ ./test.sh Acceptez vous la licence d'utilisation (procéder à l'installation)? (Y,n) n Terminé idriss@ThinkPad-T420 ~ $![]()
heu bah pareil pour le coup....
Je referais un test sur ma debian pour voir demain...
J'ai installé (et utilise au quotidien) ZSH, est ce que ça peut jouer?
Si dans le fichier équivalent au .bashrc pour ZSH ou autres fichiers de conf pour l'environnement, des alias sont définis lors de l'installation de ZSH, ça peut éventuellement jouer. Mais je doute qu'ils définissent des alias tout seuls ces shells là![]()
Allez, juste une question de paranoïaque:
Tu a bien mis
et non
Code : Sélectionner tout - Visualiser dans une fenêtre à part #!/bin/bash
Une faute de frappe c'est rapide et des fois indétectable
Code : Sélectionner tout - Visualiser dans une fenêtre à part #!/bin/dash
Cordialement.
en faite mon zshrc est un peu modifié...
je le récupère ici: http://formation-debian.via.ecp.fr/shell.html
il ressemble donc à ça:
j'ai bien mis
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247 # /etc/zsh/zshrc ou ~/.zshrc # Fichier de configuration principal de zsh, lu au lancement des shells interactifs # (et non des shells d'interprétation de fichier) # Formation Debian GNU/Linux par Alexis de Lattre # http://formation-debian.via.ecp.fr/ ################ # 1. Les alias # ################ # Gestion du 'ls' : couleur & ne touche pas aux accents alias ls='ls --classify --tabsize=0 --literal --color=auto --show-control-chars --human-readable' # Demande confirmation avant d'écraser un fichier alias cp='cp --interactive' alias mv='mv --interactive' alias rm='rm --interactive' # Raccourcis pour 'ls' alias ll='ls -l' alias la='ls -a' alias lla='ls -la' # Quelques alias pratiques alias c='clear' alias less='less --quiet' alias s='cd ..' alias df='df --human-readable' alias du='du --human-readable' alias m='mutt -y' alias md='mkdir' alias rd='rmdir' alias upgrade='apt-get update && apt-get upgrade && apt-get clean' alias vnc='xtightvncviewer' ####################################### # 2. Prompt et définition des touches # ####################################### # Exemple : ma touche HOME, cf man termcap, est codifiee K1 (upper left # key on keyboard) dans le /etc/termcap. En me referant a l'entree # correspondant a mon terminal (par exemple 'linux') dans ce fichier, je # lis : K1=\E[1~, c'est la sequence de caracteres qui sera envoyee au # shell. La commande bindkey dit simplement au shell : a chaque fois que # tu rencontres telle sequence de caractere, tu dois faire telle action. # La liste des actions est disponible dans "man zshzle". # Correspondance touches-fonction bindkey '' beginning-of-line # Home bindkey "\e[1~" beginning-of-line bindkey "\e[H" beginning-of-line bindkey '' end-of-line # End bindkey "\e[4~" end-of-line bindkey "\e[F" end-of-line bindkey '' delete-char # Del bindkey '[3~' delete-char bindkey '[2~' overwrite-mode # Insert bindkey '[5~' history-search-backward # PgUp bindkey '[6~' history-search-forward # PgDn # Prompt couleur (la couleur n'est pas la même pour le root et # pour les simples utilisateurs) if [ "`id -u`" -eq 0 ]; then export PS1="%{%}%T %{%}%n%{%}@%{%}%m %{%}%~ %{%}%#%{%} " else export PS1="%{%}%T %{%}%n%{%}@%{%}%m %{%}%~ %{%}%#%{%} " fi # Prise en charge des touches [début], [fin] et autres typeset -A key key[Home]=${terminfo[khome]} key[End]=${terminfo[kend]} key[Insert]=${terminfo[kich1]} key[Delete]=${terminfo[kdch1]} key[Up]=${terminfo[kcuu1]} key[Down]=${terminfo[kcud1]} key[Left]=${terminfo[kcub1]} key[Right]=${terminfo[kcuf1]} key[PageUp]=${terminfo[kpp]} key[PageDown]=${terminfo[knp]} [[ -n "${key[Home]}" ]] && bindkey "${key[Home]}" beginning-of-line [[ -n "${key[End]}" ]] && bindkey "${key[End]}" end-of-line [[ -n "${key[Insert]}" ]] && bindkey "${key[Insert]}" overwrite-mode [[ -n "${key[Delete]}" ]] && bindkey "${key[Delete]}" delete-char [[ -n "${key[Up]}" ]] && bindkey "${key[Up]}" up-line-or-history [[ -n "${key[Down]}" ]] && bindkey "${key[Down]}" down-line-or-history [[ -n "${key[Left]}" ]] && bindkey "${key[Left]}" backward-char [[ -n "${key[Right]}" ]] && bindkey "${key[Right]}" forward-char # Titre de la fenêtre d'un xterm case $TERM in xterm*) precmd () {print -Pn "\e]0;%n@%m: %~\a"} ;; esac # Gestion de la couleur pour 'ls' (exportation de LS_COLORS) if [ -x /usr/bin/dircolors ] then if [ -r ~/.dir_colors ] then eval "`dircolors ~/.dir_colors`" elif [ -r /etc/dir_colors ] then eval "`dircolors /etc/dir_colors`" else eval "`dircolors`" fi fi ########################################### # 3. Options de zsh (cf 'man zshoptions') # ########################################### # Je ne veux JAMAIS de beeps unsetopt beep unsetopt hist_beep unsetopt list_beep # >| doit être utilisés pour pouvoir écraser un fichier déjà existant ; # le fichier ne sera pas écrasé avec '>' unsetopt clobber # Ctrl+D est équivalent à 'logout' unsetopt ignore_eof # Affiche le code de sortie si différent de '0' setopt print_exit_value # Demande confirmation pour 'rm *' unsetopt rm_star_silent # Correction orthographique des commandes # Désactivé car, contrairement à ce que dit le "man", il essaye de # corriger les commandes avant de les hasher #setopt correct # Si on utilise des jokers dans une liste d'arguments, retire les jokers # qui ne correspondent à rien au lieu de donner une erreur setopt nullglob # Schémas de complétion # - Schéma A : # 1ère tabulation : complète jusqu'au bout de la partie commune # 2ème tabulation : propose une liste de choix # 3ème tabulation : complète avec le 1er item de la liste # 4ème tabulation : complète avec le 2ème item de la liste, etc... # -> c'est le schéma de complétion par défaut de zsh. # Schéma B : # 1ère tabulation : propose une liste de choix et complète avec le 1er item # de la liste # 2ème tabulation : complète avec le 2ème item de la liste, etc... # Si vous voulez ce schéma, décommentez la ligne suivante : #setopt menu_complete # Schéma C : # 1ère tabulation : complète jusqu'au bout de la partie commune et # propose une liste de choix # 2ème tabulation : complète avec le 1er item de la liste # 3ème tabulation : complète avec le 2ème item de la liste, etc... # Ce schéma est le meilleur à mon goût ! # Si vous voulez ce schéma, décommentez la ligne suivante : #unsetopt list_ambiguous # (Merci à Youri van Rietschoten de m'avoir donné l'info !) # Options de complétion # Quand le dernier caractère d'une complétion est '/' et que l'on # tape 'espace' après, le '/' est effacé setopt auto_remove_slash # Ne fait pas de complétion sur les fichiers et répertoires cachés unsetopt glob_dots # Traite les liens symboliques comme il faut setopt chase_links # Quand l'utilisateur commence sa commande par '!' pour faire de la # complétion historique, il n'exécute pas la commande immédiatement # mais il écrit la commande dans le prompt setopt hist_verify # Si la commande est invalide mais correspond au nom d'un sous-répertoire # exécuter 'cd sous-répertoire' setopt auto_cd # L'exécution de "cd" met le répertoire d'où l'on vient sur la pile setopt auto_pushd # Ignore les doublons dans la pile setopt pushd_ignore_dups # N'affiche pas la pile après un "pushd" ou "popd" setopt pushd_silent # "pushd" sans argument = "pushd $HOME" setopt pushd_to_home # Les jobs qui tournent en tâche de fond sont nicé à '0' unsetopt bg_nice # N'envoie pas de "HUP" aux jobs qui tourent quand le shell se ferme unsetopt hup ############################################### # 4. Paramètres de l'historique des commandes # ############################################### # Nombre d'entrées dans l'historique export HISTORY=1000 export SAVEHIST=1000 # Fichier où est stocké l'historique export HISTFILE=$HOME/.history # Ajoute l'historique à la fin de l'ancien fichier #setopt append_history # Chaque ligne est ajoutée dans l'historique à mesure qu'elle est tapée setopt inc_append_history # Ne stocke pas une ligne dans l'historique si elle est identique à la # précédente setopt hist_ignore_dups # Supprime les répétitions dans le fichier d'historique, ne conservant # que la dernière occurrence ajoutée #setopt hist_ignore_all_dups # Supprime les répétitions dans l'historique lorsqu'il est plein, mais # pas avant setopt hist_expire_dups_first # N'enregistre pas plus d'une fois une même ligne, quelles que soient # les options fixées pour la session courante #setopt hist_save_no_dups # La recherche dans l'historique avec l'éditeur de commandes de zsh ne # montre pas une même ligne plus d'une fois, même si elle a été # enregistrée setopt hist_find_no_dups ########################################### # 5. Complétion des options des commandes # ########################################### zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' zstyle ':completion:*' max-errors 3 numeric zstyle ':completion:*' use-compctl false autoload -U compinit compinit
et d'ailleurs du coup si je comprends bien la logique le script est censé utilisé ce shell et non le mien non???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2#!/bin/bash
Cela dépend de comment tu exécutes le script, si celui-ci est en mode d’exécution et que tu le lance directement, il s’exécute en respectant le shebang, donc dans ton cas en /bin/bash.
Si tu le source, il utilisera le shell en cours.
le sourcing se fait de au moins de ces 2 façons:
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part source script.sh
peux tu aussi tester les lignes suivantes (pas besoin de les mettre dans un script, les executer les unes derrière les autres):
Code : Sélectionner tout - Visualiser dans une fenêtre à part . script.sh
Et nous retourner si tu as une erreur sur l'une des lignes ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 /bin/bash test "tyty" = "tutu" echo $? test "tyty" = "tyty" echo $? test "tyty" == "tyty"
Cordialement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 16:21 viduc@NEOTOKYO ~ % /bin/bash viduc@NEOTOKYO ~ $ test "tyty" = "tutu" viduc@NEOTOKYO ~ $ echo $? 1 viduc@NEOTOKYO ~ $ test "tyty" = "tyty" viduc@NEOTOKYO ~ $ echo $? 0 viduc@NEOTOKYO ~ $ test "tyty" == "tyty" viduc@NEOTOKYO ~ $ echo $? 0 viduc@NEOTOKYO ~ $
Exact. Ce mécanisme est fait pour que des utilisateurs différents, travaillant chacun dans un shell différent, puissent exécuter chacun le script de l'autre. Sinon bye bye la coopération entre les utilisateurs...
Donc quand tu lances un programme, un script ou autre, alors
- ton shell courant est dupliqué dans un shell appelé "fils"
- à ce moment là, le shell de départ (le père) se met en attente de la fin du fils
- pendant ce temps, s'il s'agit d'un script, le fils va appeler le programme (générelement un shell mais pas forcément) indiqué dans la première ligne et va lui demander d'interpréter le script
- une fois le fils fini, le père reprend la main
Ce mécanisme permet aussi de lancer les programme en arrière plan en leur mettant un "&" en fin de ligne. A ce moment là, le père n'attend plus la fin du fils. C'est plus trop utilisé aujourd'hui avec les environnement/rms graphiques et multifenêtrés mais à l'époque des terminaux uniques, cela avait son utilité.
Sinon pour démontrer le fonctionnement du shebang, tu peux taper et exécuter le code suivant
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 #!/bin/rm # Ici tu mets ce que tu veux, même un truc absurde, de toute façon il ne sera jamais exécuté vu que le script aura été passé au travers de la commande rm et donc été effacé... qsddqsqsd qsdqsdqsd qsdqsdqsdq dqdqdqdqs
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
+1
Ce qui me fait penser à une petite question que personne n'a posée: Viduc, quel est ton shell de base (celui dans lequel tu es placé à la connexion) ???
On peut le voir en tapant echo $0 et/ou grep $LOGNAME /etc/passwd depuis un terminal...
Parce que si ce que dit jack-ft est ton cas (et que ton shebang n'est pas en première ligne), c'est ton shell de base qui prend la main...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Salut,
oui c'est bien sur la toute première ligne (sans espace avant)
et mon shell de base c'est zsh comme je disais.
Alors, ce que je ne comprend pas, c'est que ici, il n'y a pas de problème, avec:
mais que si tu utilises cette syntaxe dans un script dont le shebang est celui du bash, cela ne fonctionne pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part test "tyty" == "tyty"
C'est vraiment bizarre...
Cordialement.
Partager