Bash如果与内容不匹配

时间:2015-02-13 11:15:38

标签: 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 "Yes it matches the content"
    else
    echo "the variable doesn't match the content"
    fi
fi

运行代码时没有显示任何内容。我想要的是它显示Yes it matches the content我该怎么做?

更新,因为@BlueMoon回答我更新了我的代码,但仍然说the variable doesn't match the content 我希望它与内容相匹配

3 个答案:

答案 0 :(得分:1)

只有当两个字符串都为空时才传递的问题:

if [[ -z "$content" && -z "$nomer" ]]

(你可能意味着-n这是非空变体),你也有一个问题,即转换为小写的字符串永远不会包含大写M

if [ "$(echo $content| awk '{print tolower($0)}')" = "My sms content" ]

(你可能意味着"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" ]]

答案 1 :(得分:0)

-z测试为零长度。所以你要比较的是检查两个字符串是否为空。

答案 2 :(得分:0)

这一行

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.