在 Shell 脚本中检查字符串的格式是否正确

Checking if the string is in proper format in Shell Scripting

我正在尝试检查字符串是否符合 shell 脚本中的格式。 下面是我正在尝试的代码和我想要获得的输出。

格式:<datatype>(length,length) | <datatype>(length,length)

我有多个这种情况的案例,如果两种数据类型都有 () 那么它应该显示通过,否则失败。

例如。 decimal(1,0)|number(11,0) 这应该会通过,但是 int|number(11,0)decimal(1,0)|int 应该会失败。

代码 1:

INPUT='decimal(1,0)|number(11,0)'
sub="[A-Z][a-z]['!@#$ %^&*()_+'][0-9][|][A-Z][a-z]['!@#$ %^&*()_+'][0-9][|]"
if [ "$INPUT" == "$sub" ]; then
    echo "Passed"
else
    echo "No"
fi

代码 2:

INPUT='decimal(1,0)|number(11,0)'
sub="decimal"
if [ "$INPUT" == *"("*") |"*"("*") " ]; then
    echo "Passed"
else
    echo "No"
fi

任何帮助都可以。另请注意,我对 shell 脚本编写还很陌生。

这看起来只是一个简单的正则表达式。

INPUT='decimal(1,0)|number(11,0)'
if printf "%s" "$INPUT" | grep -qEx '[a-z]+\([0-9]+,[0-9]+\)(\|[a-z]+\([0-9]+,[0-9]+\))*'; then
    echo "Passed"
else
    echo "No"
fi

将两个值读入变量,首先删除字母字符,然后检查变量是否为空

result='FAIL'
input='int|number(6,10)'

IFS="|" read val1 val2 <<<"$(tr -d '[:alpha:]' <<<"$input")"

if [ -n "$val1" ] && [ -n "$val2" ]; then
    result='PASS'
fi
echo "$result: val1='$val1' val2='$val2'" 

结果:

FAIL: val1='' val2='(6,10)'

对于input='decimal(8,9)|number(6,10)'

PASS: val1='(8,9)' val2='(6,10)'