读取变量并搜索if和then语句以匹配变量中的某些内容

时间:2014-04-14 19:24:10

标签: linux bash if-statement string-comparison

您好我有一个命令/功能是一个脚本,用户名称分配给变量 这样:

var1=dedwards torontobgs NJVMTTS2 srounce jstickler
echo $var1 produces >>  dedwards torontobgs NJVMTTS2 srounce jstickler

如何编写命令以查看用户ID" NJVMTTS2"存在于变量中?似乎变量被视为一个字符串而不是单个字符串?

我知道这很简单但不能让它工作 我想做的是如下:

如果在$ VAR1中存在$ 1(由anther函数传递) 然后做点什么

so if $1 = NJVMTTS2
and if NJVMTTS2 contained in the $VAR1
Then do echo "yes"  else echo "no"

2 个答案:

答案 0 :(得分:1)

只是标准模式匹配。

var1='dedwards torontobgs NJVMTTS2 srounce jstickler'
if [[ $var1 = *NJVMTTS2* ]]; then
  …
fi

或者,为了便携性:

case "$var1" in
  *NJVMTTS2*) …;;
esac

更新

如果NJVMTTS2在一个参数中,你应引用参数扩展,但你必须小心不要引用模式:

case "$var1" in
  *"$1"*) …;;
esac

答案 1 :(得分:0)

首先,应引用您的作业,否则var1将仅包含第一个单词。

var1="dedwards torontobgs NJVMTTS2 srounce jstickler"

然后你可以在变量中找到名字:

if echo $var1 | grep '\bNJVMTTS2\b' >/dev/null; then echo Found it; fi

\b字边界符号确保您查找整个单词,从而匹配NJVMTTS2但不匹配fooNJVMTTS2bar

如果fooNJVMTTS2bar也正常,则另一个答案将有效。 @ Kojiro的解决方案还有一个优点,就是它不使用外部程序,它是纯粹的外壳。