2013-05-13 80 views
1

可以拨打以下replace.sh可选命令行参数壳牌

if "$1" !="" 
then 
    REPLACE_AS=$1 
else 
    REPLACE_AS="Tebow" 
fi 
find . ! -regex ".*[/]\.svn[/]?.*" -type f -print0 | xargs -0 -n 1 sed -i -e 's/SANCHEZ/'$REPLACE_AS'/g' 

很抱歉的基本问题。我正在努力使命令行参数是可选的。 IE浏览器如果有人不把它,只是运行这个脚本它使用Tebow。这似乎工作。但是,如果我用命令行参数运行脚本它不起作用。

./test.sh

这将科比替换它。

然而 ./test.sh史密斯

不会史密斯

替换桑切斯串
+0

http://www.shelldorado.com/goodcoding/cmdargs.html现在看这个 – 2013-05-13 19:23:09

回答

6

您可以使用shell parameter expansion,并且注释:

REPLACE_AS="${1:-Tebow}" 

在一行做你做6

此外,作为写你的代码应该是:

if [ "$1" != "" ] 
then REPLACE_AS="$1" 
else REPLACE_AS="Tebow" 
fi 

测试命令是[;它需要围绕它的操作数位和一个]末。您需要在情况下,各地"$1"引号包含空格;围绕"Tebow"引号是可选的,因为它不包含空格(但均匀性好)。

没有什么可以阻止你写:

xargs -0 -n 1 sed -i -e 's/SANCHEZ/'"${1:-Tebow}"'/g' 

但是变量的清晰度还是不错的,特别是如果你参考了好几遍。另外,为了清晰起见,我会将管道放在线的末端,并在第二行开始第二个命令(xargs)(这一点非常重要)。

find . ! -regex ".*[/]\.svn[/]?.*" -type f -print0 | 
xargs -0 -n 1 sed -i -e 's/SANCHEZ/'"$REPLACE_AS"'/g' 

有时候,但不是经常的,我会缩进第二个命令。 注意周围"$REPLACE_AS"双引号;它可以防止替换文本中的空格问题。

+0

很酷玩这个现在 – 2013-05-13 19:23:45

+0

这个作品太棒了!感谢Jon的快速反应! – 2013-05-13 19:26:53