2013-05-13 3 views
1

позволяет назвать следующие replace.shНеобязательный параметр командной строки Shell

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 Smith

не заменит строку Sanchez со Смитом

+0

http://www.shelldorado.com/goodcoding/cmdargs.html глядя на это сейчас –

ответ

6

Вы можете использовать shell parameter expansion и обозначения:

REPLACE_AS="${1:-Tebow}" 

сделать в одной строке, что вы do in 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

классная игра с этим сейчас –

+0

это отлично работает! спасибо за быстрый ответ Джон! –

Смежные вопросы