Bash 如果没有';与内容不符

Bash 如果没有';与内容不符,bash,Bash,我的代码: #!/bin/bash content="My sms content" nomer="My Phone number" if [[ -n "$content" && -n "$nomer" ]]; then echo "it passes the first filter..." if [ "$(echo $content| awk '{print tolower($0)}')" = "My sms content" ]; then echo "Ye

我的代码:

#!/bin/bash
content="My sms content"
nomer="My Phone number"
if [[ -n "$content" && -n "$nomer" ]]; then
echo "it passes the first filter..."
    if [ "$(echo $content| awk '{print tolower($0)}')" = "My sms content" ]; then
    echo "Yes it matches the content"
    else
    echo "the variable doesn't match the content"
    fi
fi
当我运行代码时,它不显示任何内容。我想要的是它显示
是,它与内容匹配
我该怎么做

更新作为@BlueMoon answer,我更新了我的代码,但它仍然说
变量与内容不匹配

我希望它能够匹配长度为零的内容测试。因此,您要比较的是检查两个字符串是否为空

这条线

if [[ -z "$content" && -z "$nomer" ]]; then
如果两个字符串都是非零的,则执行该操作

您可能的意思是,如果两者都不是空的:

if [[ -n "$content" && -n "$nomer" ]]; then
从手册:

   -z string
          True if the length of string is zero.
   string
   -n string
          True if the length of string is non-zero.

以及仅当两个字符串都为空时传递的问题:

(您可能指的是非空变体
-n
),您还有一个问题,即转换为小写的字符串永远不会包含大写字母
M

if [ "$(echo $content| awk '{print tolower($0)}')" = "My sms content" ]
(您可能是指
“我的短信内容”

在任何情况下,如果您使用的是相对现代的
bash
,它内置了大小写转换,因此您不必使用外部进程。以下文字记录显示了四种可能性,大写字母优先、大写字母全部、小写字母优先和小写字母全部:

pax> word='abcde' ; echo ${word^}
Abcde
pax> word='abcde' ; echo ${word^^}
ABCDE
pax> word='ABCDE' ; echo ${word,}
aBCDE
pax> word='ABCDE' ; echo ${word,,}
abcde
我在这里收集的基本原理是插入符号
^
指向上方,而逗号
指向下方。因此,您可以简单地使用:

if [[ "${content,,}" == "my sms content" ]]

miya kalpa@JID删除我的评论现在它与
content
字符串不匹配,因为
tolower
将其转换为小写,并且您的字符串
“我的短信内容”
my
中有大写的
M
。因此它不匹配。作为旁注:要将
content
的内容小写,您应该引用
content
如果[“$(echo“$content”| awk'{print tolower($0)}')”=“my sms content”];然后…
。否则,如果
content
包含glob字符,则将进行路径名扩展。然而,在Bash的最新版本中,有一种更好的方法可以将变量的内容小写:
${content,,}
。所以最好编写:
if[[“${content,,}”=“我的短信内容”];然后…
if [[ "${content,,}" == "my sms content" ]]