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" ]]