我的代码:
#!/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
我希望它与内容相匹配
答案 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.