scripts bash: si des arguments est égale à cette chaîne, de définir une variable comme cette chaîne
Je suis en train de faire un script bash et maintenant j'ai une variable appel source
et un tableau appelé samples
, comme ceci:
source='country'
samples=(US Canada Mexico...)
que je veux augmenter le nombre de sources (et de chaque source a ses propres échantillons) j'ai essayé d'ajouter quelques arguments pour ce faire. J'ai essayé ceci:
source=""
samples=("")
if [ $1="country" ]; then
source="country"
samples="US Canada Mexico..."
else
echo "try again"
fi
mais quand j'ai couru mon script source countries.sh country
il ne fonctionne pas.
Ce que je fais mal?
- comment est-il pas de travail? Lorsque vous l'exécutez, vous obtenez un message d'erreur, ou il est dit "try again", ou quelque chose d'autre?
- oui, vous pouvez penser que " la question est très simple. mais vous avez été de penser à ce sujet pendant un certain temps. Veuillez envisager l'édition de votre question pour prévoir des sorties et tous les messages d'erreur que vous obtenez. +1 pour le fait d'essayer quelque chose et de la bonne mise en forme de question. bonne chance.
- Pourquoi est-ce code, le même que celui proposé et accepté solution? C'est clair... je devine la question initiale n'ont pas les espaces à droite après le crochet ouvrant et avant l'accolade fermante de la si la peine?
- si vous regardez de près,
$1="country"
vs$1 = "country"
Vous devez vous connecter pour publier un commentaire.
Ne pas oublier les espaces:
samples="US Canada Mexico..."
après la présentation de la création de la matrice avantsamples=(US Canada Mexico...)
?if [ "$1" = "country" ]; then
.if
, >0while
...) je suis fortement d'essayer d'utiliser Python.subprocess.run
etos.exec*
peut aller très loin.Vous pouvez utiliser "=" ou "==" les opérateurs de comparaison de chaînes de caractères dans bash. Le facteur important est l'espacement entre les crochets. La bonne méthode est de crochets pour contenir l'espacement à l'intérieur, et les opérateurs de contenir l'espacement autour. Dans certains cas, différentes combinaisons de travail; toutefois, le texte suivant est destiné à être un exemple universel.
Également, note double crochets sont traitées de façon légèrement différente par rapport à une seule supports ...
J'espère que ça aide!
Il semble que vous êtes à la recherche pour analyser les arguments de ligne de commande dans votre script bash. J'ai cherché cette récemment moi-même. Je suis tombé sur la suite qui je pense va vous aider dans l'analyse les arguments:
http://rsalveti.wordpress.com/2007/04/03/bash-parsing-arguments-with-getopts/
J'ai ajouté de l'extrait de code ci-dessous comme un tl;dr
./script.sh -test t -r server -p mot de passe -v
À première vue, vous faites une assignation
=
dans votre déclaration si au lieu de comparer==
Fondamentalement, vous aurez besoin de le faire:IE:
Est que ce que vous voulez?
[]
un seul=
est une chaîne de comparaison, pas d'affectation.=
. Essayez[[ "A" = "A" ]] && echo "equal" || echo "different"
string1 == string2
,string1 = string2
,True if the strings are equal. = should be used with the test command for POSIX conformance.
=
est une façon originale de faire la comparaison, et il est beaucoup plus portable, tandis que==
est bash extension qui va casser dans d'autres coquilles, comme sh ou le tableau de bord. Depuis que la question est à propos de bash,==
est bien, mais il n'est pas plus correct que=
en aucune façon. Ce qui est beaucoup plus important que le test d'égalité dans votre réponse est la bonne, citant des$1
à"$1"
, et bien sûr les espaces autour de=
.