String 如何在Bash case语句中测试空字符串?
我有一个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
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