String 如何在Bash case语句中测试空字符串?

String 如何在Bash case语句中测试空字符串?,string,bash,null,case,String,Bash,Null,Case,我有一个Bash脚本,它根据变量的值执行操作。case语句的一般语法为: case ${command} in start) do_start ;; stop) do_stop ;; config) do_config ;; *) do_help ;; esac 如果没有提供命令,我希望执行默认例程;如果命令无法识别,则执行do\u help。我试图省略case值,因此: case ${command} in ) do_default

我有一个Bash脚本,它根据变量的值执行操作。case语句的一般语法为:

case ${command} in
   start)  do_start ;;
   stop)   do_stop ;;
   config) do_config ;;
   *)      do_help ;;
esac
如果没有提供命令,我希望执行默认例程;如果命令无法识别,则执行
do\u help
。我试图省略case值,因此:

case ${command} in
   )       do_default ;;
   ...
   *)      do_help ;;
esac
我想,结果是可以预测的:

syntax error near unexpected token `)'
然后我尝试使用正则表达式:

case ${command} in
   ^$)     do_default ;;
   ...
   *)      do_help ;;
esac
这样,一个空的
${command}
就变成了
*
案例


我想做不可能的事吗?

case语句使用globs,而不是regex,并坚持精确匹配

因此,空字符串像往常一样写入为


我使用了一个简单的fall-through。第二个case语句不会捕获传递的参数($1=“”),但以下*将捕获任何未知参数。翻转“”)和*)将不起作用,因为*)每次都会捕获所有内容,即使是空白

#!/usr/local/bin/bash
# testcase.sh
case "$1" in
  abc)
    echo "this $1 word was seen."
    ;;
  "") 
    echo "no $1 word at all was seen."
    ;;
  *)
    echo "any $1 word was seen."
    ;;
esac
以下是我的做法(针对每个人):

如果我在搜索包含数十个cgi文件的文件系统中的一个或两个文件中存在的子例程,我会输入搜索词,例如“ssn_格式”。bash在文本文件(finder.txt)中返回结果,如下所示:

-- /注册表/master\u person\u index.cgi:
SQLClinic::Security::ssn_格式($user、$script_name、$local、$local、$ssn)如果$ssn ne“”

如何提供命令?通过stdin?作为一个注释,当使用多项选择时,这同样有效:
something |''')do_something
#!/usr/local/bin/bash
# testcase.sh
case "$1" in
  abc)
    echo "this $1 word was seen."
    ;;
  "") 
    echo "no $1 word at all was seen."
    ;;
  *)
    echo "any $1 word was seen."
    ;;
esac
#!/bin/sh

echo -en "Enter string: "
read string
> finder.txt
echo "--" >> finder.txt

for file in `find . -name '*cgi'`

do

x=`grep -i -e "$string" $file`

case $x in
"" )
     echo "Skipping $file";
;;
*)
     echo "$file: " >> finder.txt
     echo "$x" >> finder.txt
     echo "--" >> finder.txt
;;
esac

done

more finder.txt