2014-03-19 3 views
1

я пытаюсь выполнить команду, которая имеет двойные кавычки внутри него:двойные кавычки внутри двойных кавычек в сценарии оболочки

insdizi=`ps -ef| grep -v grep | grep asm_pmon_ | awk ' {print $2}'` 
proddizi=`ps -ef | grep asm_smon_ | grep -v grep | cut -d"_" -f3` 
insname=() 
homename=() 
sid=() 

for i in $insdizi; do 
insname+=("$i") 
a=`ls -l /proc/${insname[ii]}/cwd | awk '{print ($NF) }' |sed 's#/dbs##'` 
olsnodes="${a}/bin/olsnodes" 
homename+=("$olsnodes") 
ii=`expr $ii + 1` 
done 

ii=`expr $ii - 1` 
for i in `seq 0 $ii`; do 
nodeNum= "${olsnodes}" 
nodeNumm= `bash -c "${nodeSayi} |grep -c '""'"` 
echo $nodeNumm 

echo "nodeNumm= $nodeNumm" 
    for node in `bash -c "${homename[i]}"`; do 
echo $node 

cokluBellekKontrol $node 
cokluSessionSayi $node 

done 

сделано

olsnodes переменными является командой, которая запускается из каталога, как:

/app/oracle/grid/bin/olsnodes 

Вот что мне нужно запустить:

/app/oracle/grid/bin/olsnodes | grep -c "" 

Я попытался это:

nodeNumm= `bash -c "${nodeNum} |grep -c '""'"` 

Но он дал мне ошибку:

"0: command not found." 

EDIT

выход olsnodes является:

ax1 
ax2 
ax3 
ax4 

Кроме того, я могу grep количество строк w с этой командой:

/u01/app/11.2.0.4/grid/bin/olsnodes |grep -c "" 
+0

Что такое вывод olsnodes, из которого вы хотите grep? –

+0

Отметьте мое редактирование .. – AloneInTheDark

+0

Я не вижу никаких '' 'в этом выпуске. Что вы хотите grep из этих строк? –

ответ

1

Одиночные и двойные кавычки не гнездятся относительно друг друга. Только скобки и скобки замены (${}, $(), $(())).

Вы можете избежать котировок в котировках с \.

nodeNumm= `bash -c "${nodeSayi} |grep -c '""'"` 

должен быть

nodeNumm= $(bash -c "${nodeSayi} |grep -c '\"\"'") 

Или бы это? Вы хотите сделать

grep -c "" 

или

grep -c '""' 

?

Если первое, то это могло быть написано просто как

grep -c '' 

и нет никаких проблем положить что в двойных кавычках.

Тогда я подозреваю, что все еще не будет делать то, что вы ожидали, если вы не ожидали, что это:

  • установить переменную nodeNumm пустую строку для продолжительности следующего,
  • запустить команду,
  • выполните вывод как команду.

Если вы хотите установить nodeNumm к выходу команды, правильный синтаксис будет:

nodeNumm=$(bash -c "${nodeSayi} | grep -c '\"\"'") 

Там нет, однако никакого смысла в управлении grep в субоболочке, который может получить нам избавиться от внешние кавычки и всю проблему гнездования. Просто

nodeNumm=$(bash -c "${nodeSayi}" | grep -c '""') 

Обратите внимание, что я изменил замену процесса с обратными кавычками в $(). Это точно потому, что это правильно относится к другим подстановкам процессов и к кавычкам.

+0

Это решение. Спасибо. – AloneInTheDark

+0

@AloneInTheDark: Сначала я написал ответ, предполагая, что вы хотите запустить 'grep -c '" "'', то есть искать пары двойных кавычек в выводе. Если вы хотите искать пустую строку (поскольку y наше редактирование на вопрос), пустая строка может быть эквивалентно записана как '' '', и нет проблем с вложенными предложениями. –

+0

Я хотел запустить grep -c "" Это работает пока. Спасибо за информацию. – AloneInTheDark

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