LINUX.ORG.RU
ФорумAdmin

Shell: работа со строками


0

0

Уважаемые!

Помогите в написании скрипта на шелле (/bin/sh).

Имеется функция:
----------------------- cut ---------------------------
getDomainKey() {
	local DKDIR=$OUTDIR/domainkeys/$1
	mkdir -p $DKDIR
	openssl genrsa -out $DKDIR/rsa.private 768 > /dev/null 2>&1
	openssl rsa -in $DKDIR/rsa.private -out $DKDIR/rsa.public -pubout -outform PEM > /dev/null 2>&1
	DOMAINKEY=`cat $DKDIR/rsa.public | head -n 4 | tail -n 3 | sed -e 's|/|\\/|g' -e s/\r//g`
	#DOMAINKEY=`cat $DKDIR/rsa.public | head -n 4 | tail -n 3`
	echo $DOMAINKEY
}
----------------------- /cut ---------------------------

Далее мне нужно вставить этот самый ключ в темплейт файла зоны.
Делаю с помощью sed:
----------------------- cut ---------------------------
# GENERATE DOMAINKEY
getDomainKey $DOMAIN

# GENERATING ZONE FILE
#    Replace <domain>, <ip>, <serial> patterns in template file
#    and store the result in a file
sed \
	-e s/\<domain\>/$DOMAIN/g \
	-e s/\<ip\>/$IP/g \
	-e s/\<serial\>/$SERIALNUM/g \
	-e 's|\<domainkey\>|'$DOMAINKEY'|g' \
$TMPLFILE > $ZONEFILE
----------------------- /cut ---------------------------

Так вот. Получаю ошибку от sed-а, мол "незавершенная команда `s'".
Насколько я понимаю это происходит из-за присутствия в $DOMAINKEY символа "/".
Как видите в теле функции пытаюсь ескейпить его, однако результата нет.

Помогите плиз, дельным советом либо ссылкой на форум где мне помогут. Замаялся ужо!

С уважением.

ну например так:

escape_for_sed() { echo "$@" | sed 's/\//\\\//g' }

ESCAPED_KEY=`escape_for_sed "$DOMAINKEY"`

после этого используй ESCAPED_KEY вместо DOMAINKEY в седе.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

ну а если много необычных символов может быть, то лучше awk использовать -- там меньше проблем со служебными символами

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

> после этого используй ESCAPED_KEY вместо DOMAINKEY в седе. А можно пример как мне его использовать потом. Что-то все равно ругается... :(

FreeOne
() автор топика
Ответ на: комментарий от FreeOne

кавычки вокруг последнего s замени на двойные (")

ananas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.