Bash检查字符串是否以#等字符开头

时间:2020-01-09 10:37:19  来源:igfitidea点击:

我的bash shell脚本使用bash while循环逐行读取配置文件。
我需要检查$var中存储的字符串是否以某些值开头,例如#字符。
如果是这样,我需要忽略该值并从我的配置文件中读取下一行。
如何检查在Linux或类似Unix的操作系统上运行的bash shell脚本中,变量是否以#开头?

说明:在bash中,我们可以使用正则表达式比较运算符=~检查字符串是否以某个值开头。
可以使用以下任何一种方法有效地测试bash变量以bash中的字符串或字符开头。

如何检查字符串是否以bash中的某些值开头

让我们定义一个称为vech的shell变量,如下所示:

vech="Bus"

要检查存储在$vech中的字符串Bus是否以B开头,请运行:

[[ $vech = B* ]] && echo "Start with B"

[[用于执行条件命令。
它检查$vech是否以B开头,后跟任意字符。
将vech设置为其他内容,然后重试:

vech="Car"
[[ $vech = B* ]] && echo "Start with B"
[[ $vech = B* ]] && echo "Start with B" || echo "Not matched"

Bash使用if语句检查字符串是否以字符开头

if..else..fi允许根据命令的成功或失败进行选择:

#!/bin/bash
input="xBus"
 
if [[ $input = B* ]]
then
	echo "Start with B"
else
	echo "No match"
fi

Bash检查变量字符串是否以#值开头

逐行读取文件的语法如下:

#!/bin/bash
input="/path/to/txt/file"
while IFS= read -r var
do
  echo "$var"
done < "$input"

让我们添加检查以查看$var是否在bash中以#开头:

#!/bin/bash
input="/path/to/txt/file"
while IFS= read -r var
do
  #
  # if value of $var starts with #, ignore it
  #
  [[ $var =~ ^#.* ]] && continue
  echo "$var"
done < "$input"

Continue语句将继续封闭while循环的下一次迭代,因此当找到注释行时,它将跳过其余命令。

如何使用正则表达式比较运算符=〜如果字符串以字符开头

语法如下,以查看$var是否以#开头:

if [[ "$var" =~ ^#.*  ]]; then
    echo "yes"
fi

因此,以下是更新版本:

while IFS='|' read -r t u
do
        # ignore all config line starting with '#'
	[[ $t =~ ^#.* ]] && continue
        echo "Working on $t and $u" 
 
done < "$INPUT_FILE"

如何检查字符串是否以bash中的某些值开头

用case语句代替多层if-then-else-fi语句是不错的选择。
它使您可以将多个值与一个变量进行匹配。
读和写比较容易:

#!/bin/bash
# set default to 'Bus' but accept the CLI arg for testing
input="${1:-Bus}" 
echo -n "$input starts with 'B' : "
case "$input" in
    B*)
            echo "yes";;
     *)
            echo "no";;
esac