J'essaie d'écrire mon script shell thing.sh
Pour ce faire un exécutable et le gérer avec la seule lettre "A" comme si:
$ ./thing.sh A
Je reçois la sortie
A
Si l'argument 1 n'est pas un, je veux la sortie
Not A
Voici mon code jusqu'à présent:
#!/bin/bash
if [ "$1" -eq "A"]
then echo "A"
else echo "Not A"
fi
qui retourne, peu importe ce que j'entre,
./thing.sh: line 3: [:missing `]'
Not A
J'essaie ce que j'espérais vérifier quelque chose avec une ou plusieurs lettres et comparerait-la contre la lettre A; Quelqu'un pourrait-il me dire ce que je manquais d'obtenir cela pour travailler? Merci
Qu'en est-il de la plus courte:
#!/bin/bash
[[ $1 == A ]] && echo "A" || echo "not A"
?
Et une version débutante (logique identique):
#!/bin/bash
if [[ $1 == A ]]; then
echo "A"
else
echo "not A"
fi
Comme Scott a dit, vous avez une erreur de syntaxe (espace manquant).
[[ $1 == A ]]
est exécuté, puis si c'est vrai, echo "A"
est exécuté, et s'il est faux, echo "not A"
est exécuté, voir http://mywiki.woolgedge.org/bashguide/testssandconditions[[
est un mot clé BASH similaire à (mais plus puissant que) le [
commande. Voir http://mywiki.woolgedge.org/bashfaq/031 et http://mywiki.woolgedge.org/bashguide/testandConditions Sauf si vous écrivez pour POSIX SH , Je recommande [[
.Changez la première ligne à:
if [ "$1" == "A" ]
L'opérateur -EQ est pour les entiers. Et comme quelqu'un d'autre l'a mentionné, l'espace compte avant le ']'.
Essayez de mettre un espace entre "A"
et ]
.
Vous avez besoin d'un espace après "A"
if [ "$1" -eq "A" ]