use conditional in bash script to check string argument

大城市里の小女人 提交于 2019-12-12 07:41:27

问题


I am trying to write my shell script thing.sh so that upon making it an executable and running it with the single letter ``A" like so:

$ ./thing.sh A

I get the output

A 

If argument 1 is not A, I want the output

Not A 

Here is my code so far :

#!/bin/bash

if [ "$1" -eq "A"]
then echo "A"
else echo "Not A"
fi 

which returns, no matter what I enter,

./thing.sh: line 3: [:missing `]'
Not A

I am trying what I hoped would check something with one or several letters and compare it against the letter A; could someone tell me what I am missing to get this to work? Thank you


回答1:


What about the shorter :

#!/bin/bash

[[ $1 == A ]] && echo "A" || echo "not A"

?

And a beginner version (identical logic) :

#!/bin/bash

if [[ $1 == A ]]; then
    echo "A"
else
    echo "not A"
fi

Like Scott said, you have a syntax error (missing space).

explanations

  • I use boolean logic here. [[ $1 == A ]] is executed, and then if its true, echo "A" is executed, and if it's false, echo "not A" is executed, See http://mywiki.wooledge.org/BashGuide/TestsAndConditionals
  • [[ is a bash keyword similar to (but more powerful than) the [ command. See http://mywiki.wooledge.org/BashFAQ/031 and http://mywiki.wooledge.org/BashGuide/TestsAndConditionals Unless you're writing for POSIX sh, I recommend [[.



回答2:


Change the first line to:

if [ "$1" == "A" ]

The -eq operator is for integers. And as someone else mentioned, the space does matter before the ']'.

See here: http://tldp.org/LDP/abs/html/comparison-ops.html




回答3:


Try putting a space between "A" and ].




回答4:


You need a space after "A"

if [ "$1" -eq "A" ]


来源:https://stackoverflow.com/questions/14763608/use-conditional-in-bash-script-to-check-string-argument

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!