在shell脚本中如何判断字符串是否以井号开头

时间:2019-11-20 08:52:58  来源:igfitidea点击:

问题

在Linux或类似Unix的操作系统上,如何检查bash shell脚本中的变量是否以#开头?
在bash中读取配置文件时,如何判断某一行是否以井号开头?如果以井号开头,则忽略,并读取下一行。

解决方案

在bash中,我们也可以使用正则表达式。shell是支持正则表达式的。
所以使用=~就可以检查字符串是否以某个值开头。

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

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

color="Red"

检查color变量是否以R开头:

[[ $color = R* ]] && echo "Start with R"

[[用于执行条件命令。它检查$color是否以R开头,后跟任意字符。

将color设置为其他内容,然后重新测试:

color="Blue"
[[ $color = R* ]] && echo "Start with R"
[[ $color = R* ]] && echo "Start with R" || echo "Not matched"

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

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

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

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

在shell脚本中逐行读取配置文件的语法如下:

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

添加新的代码,检查每一行var是否以#开头:

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

Continue语句将跳过其余命令,继续while循环的下一次迭代。

shell中如何使用正则表达式的比较运算符=~来判断字符串是否以字符开头

shell脚本中判断$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中如何检查字符串是否以某个子字符串开头

可以使用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

总结

我们学习了在shell中,各种检查字符串是否以某个值开头的方法。