Unix KSH脚本在case语句中检查字母数字
下面是我试图实现的一个简化模型:Unix KSH脚本在case语句中检查字母数字,unix,case,ksh,Unix,Case,Ksh,下面是我试图实现的一个简化模型: #!bin/ksh string=AUS00 case $string in [[:alnum:]] ) echo "alphanumeric" ;; *) echo "nope" ;; esac 我无法验证字母数字代码 限制条件: 验证需要在case语句中进行 不支持alnum函数 只有阳性检查。无法检查是否缺少字母数字 非常感谢该模式将与单个字母数字字符相匹配。您的字符串超过一个字符,因此不匹配 如果要检查字符串是否包含alnum字符,则需要*[[:aln
#!bin/ksh
string=AUS00
case $string in
[[:alnum:]] ) echo "alphanumeric" ;;
*) echo "nope" ;;
esac
我无法验证字母数字代码
限制条件:
非常感谢该模式将与单个字母数字字符相匹配。您的字符串超过一个字符,因此不匹配 如果要检查字符串是否包含alnum字符,则需要
*[[:alnum:][]*
如果要检查字符串是否只包含alnum字符,我会翻转检查以查看该字符串是否包含非alnum字符:
for string in alnumOnly 'not all alnum'; do
case "$string" in
*[^[:alnum:]]*) echo "$string -> nope" ;;
*) echo "$string -> alphanumeric" ;;
esac
done
我意识到ksh(甚至ksh88)实现了bash所描述的“扩展模式”: 模式列表是分隔的一个或多个模式的列表 用一个|从对方身上。可以形成复合图案 具有以下一项或多项: ?(模式列表) 可选地匹配任意一个给定模式 *(图案列表) 匹配给定对象的零次或多次出现 模式 +(图案列表) 匹配给定模式的一个或多个实例 @(图案列表) 完全匹配给定模式中的一个 !!(图案列表) 匹配除一个给定模式之外的任何模式 因此,我们可以:
case "$string" in
+([[:alnum:]]) ) echo "$string -> alphanumeric" ;;
* ) echo "string -> nope" ;;
esac
也只是想引起你的注意。你的hashbang中漏了一个斜杠:
#/bin/ksh
谢谢。你能解释一下翻开支票的理由吗。我尝试了[[:alnum:],它同时传递字母数字和非字母数字字符串。由于*
确实是一个通配符模式,它将匹配任何内容。因此模式*[:alnum:][]*
意味着任何字符都可以出现在字母数字字符之前和/或之后。您的“非字母数字字符串”可能至少包含一个alnum字符。这就是为什么翻转逻辑更容易:如果字符串至少包含一个非alnum字符,则该字符串不能完全是alnum。
case "$string" in
+([[:alnum:]]) ) echo "$string -> alphanumeric" ;;
* ) echo "string -> nope" ;;
esac