在Shell脚本变量中搜索字符串

3

我有一个shell脚本变量。

$a = "Hello i am pass"

现在我想在变量 $a 中搜索 "pass"。
if ["$a" == "pass"]; then
echo "`Success`" 
else 
echo "`fail`"
fi

请给我一个用于在上述代码中搜索密码关键字的shell脚本。

2
SO不是一个“为我编写代码”的网站。我们很乐意帮助您解决自己的代码问题,所以当您尝试了某些东西并遇到问题时,我们将很乐意提供帮助。 - Levon
@Levon,对不起,我不明白你在说什么。你能说得更清楚些吗? - logan
一般来说,Stack Overflow 是用来询问你已经编写的代码中的具体问题的地方,而不是一个让你来说,“我有这个问题,请帮我写出解决代码”的地方。也许可以通过StackOverflow FAQ来进一步澄清这一点。 - Levon
@Levon:请取消您的踩票,因为我修改了问题并理解了Stackoverflow的所有常见问题解答。 - logan
6个回答

14

试试这个方法:

#!/bin/bash
a="Hello i am pass";
if [ `echo $a | grep -c "pass" ` -gt 0 ]
then
  echo "Success"
else
  echo "Fail";
fi

6
我认为使用grep比接受的使用awk的答案更安全。在Solaris上,可能需要使用nawk;而在OS X上,可能需要从端口使用gawk - jww

5
这里有一种更紧凑的写法:
```html

这是更紧凑的写法:

```
echo "$a" | grep "pass" && echo "Found." || echo "Not found."

您可以使用大括号来放置多个指令,而不是简单地使用echo

echo "$a" | grep "pass" && {echo "Found.";exit 0} || {echo "Not found.";exit 1}

1
在这种情况下,请使用大括号 { } 而不是括号。不需要使用子壳。 - Amit Naidu
是的,但仅仅替换大括号是不够的 - 现在你的终端 shell 将会 退出。你还需要在闭合大括号前加上分号,并在打开大括号后加上空格。`echo "$a" | grep "pass" && { echo "找到了。"; true; } || { echo "未找到。"; false; }。 - Amit Naidu

5
flag=`echo $a|awk '{print match($0,"pass")}'`;

if [ $flag -gt 0 ];then

    echo "Success";
else
    echo "fail";

fi

仅为了字符串匹配而分叉awkgrep等有点过头了。我担心很多人会复制粘贴这个答案,因为它是一个被接受的答案,所以首先运行这个(bash/ksh/zsh):a='Hello i am pass'; [[ "$a" =~ "pass" ]] && echo Success || echo Fail - Amit Naidu

1
今天我使用了扩展选择参数,并使用执行 shell 进行字符串匹配。如果有人遇到相同的问题,可以使用此方法。
if [ `echo $test| grep -c "abc" ` -gt 0 ]

如果成功则输出 "Success",否则输出 "Fail"。


0

简短命令:

OPC="test"
PROD="This is a test"
[[ ${PROD,,} =~ $OPC ]] && echo -n 1 || echo -n 0

在“PROD”中查找“OPC”时,答案将为“1”。

0

试试这个

a="Hello I am Pass"; 
a1="Hello, Passed my First Attempt" 
a2="Passed in First Attempt"

if [[ ${a,,} =~ 'pass' ]]; then echo 'Success'; else echo 'First Attempt in Learning'; fi

我觉得那只是bash,对吧? - sehe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接