如何在bash中检查有效的字符串输入?

时间:2011-11-01 20:16:54

标签: linux string bash

代码:

read location

接受的输入是

"/home/(10 chars)" or "/(10 chars)" or "(10 chars)"

如何检查有效输入?以及如何从$ location变量中删除10个字符?

3 个答案:

答案 0 :(得分:3)

你需要这样的东西:

case "$location" in
    /home/??????????)
        echo $location
        ;;

    /??????????)
        echo $location
        ;;

    ??????????)
        echo $location
        ;;

    *)
        d=$(dirname "$location")
        b=$(basename "$location")
        echo $d/${b:0:10}
esac

答案 1 :(得分:2)

您想要替换运算符。 ${VAR#/home/}评估$VAR的值为/home/被剥离的内容(如果存在)。通过将这些表达式的结果与$VAR本身进行比较,您可以确定您的值是否匹配,以及剥离的版本是什么。 ${#VAR}为您提供变量值的长度。

答案 2 :(得分:2)

我会像这样使用grep表达式:

echo $location | grep -xq "\w\{10\}\|/\w\{10\}\|/home/\w\{10\}"

这匹配的行恰好是以下情况之一(由-x引起)并且不打印匹配行(由-q引起)

  • 10个字符
  • 带有前导/
  • 的10个字符
  • 前面带有'/ home /'
  • 的10个字符

要在脚本中使用它,只需将其放在if语句中,如下所示:

if echo "$location" | grep -xq "\w\{10\}\|/\w\{10\}\|/home/\w\{10\}"; then
    # location valid
else
    # location not valid
fi