如何检查有效的stringinput在bash中?

码:

read location 

接受的投入是

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

如何检查有效的input? 以及如何从$位置variables削减10个字符?

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

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

这匹配下列几种情况中的一种(由-x引起),不打印匹配的行(由-q引起)

  • 10个字符
  • 领先/
  • 以“/ home /”开头的10个字符

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

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

你需要这样的东西:

 case "$location" in /home/??????????) echo $location ;; /??????????) echo $location ;; ??????????) echo $location ;; *) d=$(dirname "$location") b=$(basename "$location") echo $d/${b:0:10} esac 

你想要替代操作符。 ${VAR#/home/}计算结果是$VAR的值,如果它存在的话,则会带领/home/ stripped。 通过比较这些表达式的结果到$VAR本身,您可以确定您的值是否匹配,以及剥离的版本是什么。 和${#VAR}给你一个变量值的长度。