我正在处理应该接收许多参数的bash脚本。这些论点可能很简单:
Myscript [-r] [-l|-u] <dir/file names...>
或者它可能只是一个sed模式而不是简单的参数,如:
Myscript <sed pattern> <dir/file names...>
所以我的问题是如何检查给出的参数是否是sed模式而不是目录路径或文件名?
我已经做了一些事情,但它不适用于漫长的路径(dir1/dir2/dir
)
while [[ $# > 0 ]]
do
key="$1"
case $key in
-ru|-ur)
config_recusive
config_upper
shift
;;
-rl|-lr)
config_recusive
config_lower
shift
;;
-r)
config_recusive
shift
;;
-l)
config_lower
shift
;;
-u)
config_upper
shift
;;
*)
check="^.*/.*/.*$"
if [[ $key =~ $check ]] ; then
config_sed_pattern
else
TARGET=$key
fi
shift
;;
esac
done
更清楚的是,当我试图像这样运行脚本时,这是我的问题的一个例子:
./myscript -u tmp/users/regions
将路径(tmp/users/regions
)作为sed模式而感到困惑。
希望我足够清楚。
等待你的帮助:)
谢谢
答案 0 :(得分:1)
我认为您可以尝试在某些内容上运行该脚本
echo a | sed "$pattern" >/dev/null 2>/dev/null
然后检查$?
if [ $? != 0 ]; then # means sed failed
#...
但也许sed会认为这也是它的论点。
顺便说一句,使用getopt
处理参数会使事情变得更容易。
我不认为你设计参数格式的方式是好的。也许你认为以不同的形式制作论证可以使你的程序看起来充满活力和令人敬畏。但现在你正在努力解决一个与你的严肃事务无关的问题,并浪费你自己的时间和我们的时间。这不好。让事情变得愚蠢和清晰是更好的。
在你的情况下,也许你可以添加另一个参数来表明它是一个随后的sed表达式。
YourScript -e <sed expr> <others>
以这种方式,你会知道你两周后做了什么。