2015-06-16 6 views
0

Я намерен передать переменную в качестве параметра моей функции. (Целью этой функции является подключение к Terdata, выборка из десяти записей из таблицы и запись в файл). Но моя функция не вызывается, а имена файлов в домашнем пути отображаются.Передача переменной в качестве аргумента функции UNIX

Есть ли способ передать значение аргумента в качестве переменной.

Ниже мой сценарий:

#!/bin/ksh 
set -x 
my_first_fn() 
{ 
query="SEL TOP 10 * FROM XYZ.TABLENAME" 
${BTEQ} << EOF 
.logon ${pSERVER}/${pUSERNAME},${pPWD}; 
.set width 6000; 
.set separator ','; 
.set titledashes off; 
.EXPORT FILE = '${home}/BTEQ.txt'; 
${stmt}; 
.EXPORT RESET 

.IF ERRORCODE <> 0 
THEN .GOTO EXITERR 
.QUIT 0; 
.LOGOFF; 

.LABEL EXITERR 
.QUIT 1; 
.LOGOFF; 
EOF 
} 


LOG_FILE=${home}/myscript.log 

my_first_fn $query | tee ${LOG_FILE} 

Заранее спасибо ... :-)

+0

Вы пытались уменьшить объем своей программы? Я не думаю, что вам нужно иметь этот материал SQL в 'my_first_fn()', чтобы выяснить, как передать аргументы функции. Я, конечно, не хочу этого беспокоиться. Но глядя на ваш звонок ... почему вы * вызываете * 'my_first_fn()' с '$ query' в качестве параметра -' query' является переменной, только * определенной * в 'my_first_fn()'? – DevSolar

+0

Также, используйте 'set -vx', чтобы увидеть код a.) до его выполнения, b.) с переменными, расширенными до их значений. Вы должны увидеть, где «имена файлов на домашнем пути» прокрадываются. Удачи. – shellter

+0

Вы не определяете 'BTEQ' в этом коде, я предполагаю, что он находится в среде. Вы определяете 'query' * в функции *, поэтому вы фактически не передаете никаких аргументов, когда вы' my_first_fn $ query'. Вы не используете 'query', а переменная' stmt' не определена. Таким образом, код, который вы используете, и код, который вы показываете, вероятно, разные. Решение вашей проблемы, скорее всего, будет ** цитировать ваши переменные **: 'my_first_fn" $ query "' –

ответ

0

Я не определил stmt переменные и ожидаемого сценарий к execute.This является той частью, которая вызвала Проблема. Вместо этого я могу напрямую вызвать функцию и упомянуть SEL TOP 10 * FROM XYZ.TABLENAME в теле функции. - UnixNewbie

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