2013-05-13 78 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