在 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)'
我正在尝试检查字符串是否符合 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)'