Shell编程中如何检查变量是否满足多个条件?

Shell编程中如何检查变量是否满足多个条件?在Shell编程中,有时需要检查一个变量是否满足多个条件,例如var == bar || var 。例如:需要注意的是,在bash 4.1及更高

大家好,欢迎来到IT知识分享网。

Shell编程中如何检查变量是否满足多个条件?

在Shell编程中,有时需要检查一个变量是否满足多个条件,例如var == bar || var 。以下是一些解决方案:

  1. 使用case语句。在Bourne shell中,可以使用以下方法:
# Bourne
case $var in
    foo|bar|more) ... ;;
esac
  1. 在Bash和ksh中,可以使用扩展通配符。例如:
# bash/ksh

if [[ $var == @(foo|bar|more) ]]; then
    ...
fi

需要注意的是,在bash 4.1及更高版本中,默认在[[命令内部启用扩展通配符。如果需要针对较旧版本的bash进行编程,需要在脚本中打开它们(在所有函数或复合命令之外使用shopt -s extglob)。

  1. 循环遍历模式列表,逐个检查每个模式。例如:
# bash/ksh93

[[ -v BASH_VERSION ]] && shopt -s extglob

# usage: pmatch string pattern [ pattern ... ]

function any {
    [[ -n $1 ]] || return
    typeset pat match=$1
    shift

    for pat; do
        [[ $match == $pat ]] && return
    done

    return 1
}

var='foo bar'
if any "$var" '@(bar|baz)' foo* blarg; then
    echo 'var matched at least one of the patterns!'
fi
  1. 使用&模式分隔符进行逻辑合取(如果$var匹配所有模式则返回true),仅适用于ksh93。例如:
# ksh93 only
[[ $var == @(foo&bar&more) ]] && ...
  1. 对于仅支持ksh88子集(扩展通配符模式)的shell,可以使用否定子模式运算符来DeMorganify逻辑。例如:
# bash/ksh88/etc...
[[ $var == !(!(foo)|!(bar)|!(more)) ]] && ...

需要注意的是,这种方法不太清晰,也不比为每个模式编写单独的表达式更短。

更多

希望这些信息能够帮助你更好地学习Shell编程。想了解更多shell的更多编程技巧和编程最佳实践,可以关注我正在编写的《shell脚本编程最佳实践》

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/59600.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信