linux - Optional Command line parameter Shell -


lets call following replace.sh

if "$1" !=""   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' 

sorry primitive question. trying make command line parameter optional . ie if doesn't put , runs script uses tebow. seems work. if run script command line argument doesnt work.

ie

./test.sh

this replace tebow.

however ./test.sh smith

will not replace sanchez string smith

you can use shell parameter expansion , notation:

replace_as="${1:-tebow}" 

to in 1 line in 6.

additionally, code written should be:

if [ "$1" != "" ] replace_as="$1" else replace_as="tebow" fi 

the test command [; needs spaces around operands , ] @ end. need quotes around "$1" in case contains spaces; quotes around "tebow" optional because doesn't contain spaces (but uniformity good).

there's nothing stop writing:

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

but clarity of variable good, if you'll refer several times.

also, leave pipe @ end of line , start second command (xargs) on second line clarity (again - important).

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

sometimes, not often, i'll indent second command. note double quotes around "$replace_as"; prevents problems spaces in replacement text.


Comments

Popular posts from this blog

c# - DetailsView in ASP.Net - How to add another column on the side/add a control in each row? -

javascript - firefox memory leak -

Trying to import CSV file to a SQL Server database using asp.net and c# - can't find what I'm missing -