在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中,各种检查字符串是否以某个值开头的方法。