在shell中如何判断字符串是否以某个字符开头

时间:2019-04-29 03:17:19  来源:igfitidea点击:

在bash shell脚本中使用while循环逐行读取配置文件,需要检查某一行是否以字符井号#开始。
那么在shell中如何检查变量是否以某个字符开头?

在bash中,我们可以使用正则 比较运算符=~来检查字符串是否以某个值开头。

下面的方法将测试bash变量是否以字符串或字符开头。

bash中如何检查一个字符串是否以某个值开始

定义一个变量

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语句判断字符串是否以某个字符开头

#!/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"

添加检查,在bash中查看$var是否以“#”开头

#!/bin/bash
input="/path/to/txt/file"
while IFS= read -r var
do
  #
  # 如果$var的值已井号开头,则忽略它
  #
  [[ $var =~ ^#.* ]] && continue
  echo "$var"
done < "$input"

如何使用regex比较运算符=~来判断字符串是否以某个字符开头

判断$var是否以“#”开头:

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

示例:

while IFS='|' read -r t u
do
    # 忽略所有以井号#开头的配置行
	[[ $t =~ ^#.* ]] && continue
        echo "Working on $t and $u" 
 
done < "$INPUT_FILE"

在bash中如何检查一个字符串是否以某个值开始

如果是多级判断if-then-else-fi语句,case语句是个很好的替换方案。它可以一个变量匹配多个值:

#!/bin/bash
# 接受CLI参数进行测试,默认值设置为 'Bus' 
input="${1:-Bus}" 
echo -n "$input starts with 'B' : "
case "$input" in
    B*)
            echo "yes";;
     *)
            echo "no";;
esac