web-dev-qa-db-fra.com

Utilisez conditionné dans le script Bash pour vérifier l'argument de chaîne

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

18
user1535776

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).

explications

27
Gilles Quenot

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 ']'.

Voyez ici: http://tldp.org/ldp/abs/html/comparon-ops.html

5
Geoff Gustafson

Essayez de mettre un espace entre "A" et ].

4
Scott

Vous avez besoin d'un espace après "A"

if [ "$1" -eq "A" ]
4
Fred Thomsen