use*_*776 17 linux bash shell terminal sh
我正在尝试编写我的shell脚本,thing.sh以便在使其成为可执行文件并使用单个字母"A"运行它时,如下所示:
$ ./thing.sh A
Run Code Online (Sandbox Code Playgroud)
我得到了输出
A
Run Code Online (Sandbox Code Playgroud)
如果参数1不是A,我想要输出
Not A
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我的代码:
#!/bin/bash
if [ "$1" -eq "A"]
then echo "A"
else echo "Not A"
fi
Run Code Online (Sandbox Code Playgroud)
无论我输入什么,它都会返回
./thing.sh: line 3: [:missing `]'
Not A
Run Code Online (Sandbox Code Playgroud)
我正在尝试我希望用一个或几个字母检查的东西并将其与字母A进行比较; 有人可以告诉我我错过了什么让这个工作?谢谢
Gil*_*not 30
那短的怎么样:
#!/bin/bash
[[ $1 == A ]] && echo "A" || echo "not A"
Run Code Online (Sandbox Code Playgroud)
?
和初学者版本(相同的逻辑):
#!/bin/bash
if [[ $1 == A ]]; then
echo "A"
else
echo "not A"
fi
Run Code Online (Sandbox Code Playgroud)
像Scott说的那样,你有一个语法错误(缺少空间).
[[ $1 == A ]]执行,如果是真的,echo "A"则执行,如果是,echo "not A"则执行,请参阅http://mywiki.wooledge.org/BashGuide/TestsAndConditionals[[是一个类似于(但比[命令更强大)的bash关键字.请参阅http://mywiki.wooledge.org/BashFAQ/031和http://mywiki.wooledge.org/BashGuide/TestsAndConditionals除非您正在为POSIX sh编写,否则我建议您这样做[[.小智 5
将第一行更改为:
if [ "$1" == "A" ]
Run Code Online (Sandbox Code Playgroud)
-eq运算符用于整数.正如其他人提到的那样,空间在']'之前确实很重要.
见这里:http://tldp.org/LDP/abs/html/comparison-ops.html