如何在Bash中比较string

如何将一个variables与一个string进行比较(如果匹配,则执行一些操作)?

尝试这个:

if [ "$x" == "valid" ]; then echo "x has the value 'valid'" fi 

如果你想在不匹配的时候做一些事情,把==replace成!= 。 你需要$x左右的引号,因为如果$x是空的,你会得到if [ == "valid" ]...这是一个语法错误。


请注意, bash允许==用于[ ,但这不是标准的。 或者使用[[ "$x" == "valid" ]] (在这种情况下, $x的引号是可选的)或[ "$x" = "valid" ]

或者,如果你不需要其他条款:

 [ "$x" == "valid" ] && echo "x has the value 'valid'" 

比较使用通配符的string

 if [[ "$stringA" == *$stringB* ]]; then # Do something here else # Do Something here fi 
 a="abc" b="def" # Equality Comparison if [ "$a" == "$b" ]; then echo "Strings match" else echo "Strings don't match" fi # Lexicographic (greater than, less than) comparison. if [ "$a" \< "$b" ]; then echo "$a is lexicographically smaller then $b" elif [ "$a" \> "$b" ]; then echo "$b is lexicographically smaller than $a" else echo "Strings are equal" fi 

笔记:

  1. if[ and ]之间的空格很重要
  2. ><是redirect操作符,所以用\>\<分别为string转义。

你也可以使用用例/ esac

 case "$string" in "$pattern" ) echo "found";; esac 

有一点我不得不同意其中一个意见:

 [ "$x" == "valid" ] && echo "valid" || echo "invalid" 

不,这不是一个疯狂的oneliner

这只是一个看起来像,嗯,外行…

它以某种方式使用常见的模式作为语言;

而且,你学习了语言。

其实,阅读很好

这是一个简单的逻辑expression式,有一个特殊的部分:逻辑运算符的懒惰评估。

 [ "$x" == "valid" ] && echo "valid" || echo "invalid" 

每个部分都是一个逻辑expression; 第一个可能是真的还是假的,另外两个是真的。

 ( [ "$x" == "valid" ] && echo "valid" ) || echo "invalid" 

现在,当它被评估时,第一个被检查。 如果它是错误的,那么逻辑的第二个操作数 &&不相关后的&& 。 第一个是不正确的,所以无论如何它不可能是第一个和第二个。
现在,在这种情况下是逻辑 ||的第一面 假的,但是如果对方 – 第三部分 – 是真的,那么可能是真的。

所以第三部分将被评估 – 主要是将这个信息写成副作用。 (它的结果为0 ,这里我们不使用)

其他情况类似,但更简单 – 我承诺! 是 – 可以 – 容易阅读!
(我没有一个,但我认为做一个灰胡子的UNIX老兵帮助很多。)

下面的脚本从一个名为“testonthis”的文件中逐行读取,然后将每行与一个简单的string,一个带有特殊字符的string和一个正则expression式进行比较,如果不匹配,那么脚本将打印行o / w。

bash中的空间非常重要。 所以下面会工作

 [ "$LINE" != "table_name" ] 

但以下不会:

 ["$LINE" != "table_name"] 

所以请按原样使用:

 cat testonthis | while read LINE do if [ "$LINE" != "table_name" ] && [ "$LINE" != "--------------------------------" ] && [[ "$LINE" =~ [^[:space:]] ]] && [[ "$LINE" != SQL* ]]; then echo $LINE fi done 

我可能会使用正则expression式匹配,如果input只有几个有效的条目。 例如,只有“开始”和“停止”是有效的动作。

 if [[ "${ACTION,,}" =~ ^(start|stop)$ ]]; then echo "valid action" fi 

请注意,我通过使用双逗号小写variables$ACTION 。 另外请注意,这不会在太旧的bash版本在那里工作。