Como faço para passar uma variável para uma função que já está sendo escapada?

0

O que eu quero fazer é criar várias instruções sql do informix & depois executá-los através de um script bash.

Aqui está o que eu tenho até agora (isso funciona), mas foi criado para ser executado a partir de um cron job, por isso só acontece um dia por vez:

echo "
update hst'date --date='yesterday' +%m%d%y' 
   set x = 'GARP' 
 where y in ('CRE', 'LAC', 'SRL', 'JAG', 'JNM', 'BIM')
   and appl = '';
" > update_x_hst.sql
chmod 777 update_x_hst.sql
isql -s history_hst update_x_hst.sql
rm update_x_hst.sql

Eu tenho que fazer desta forma porque o sistema que eu estou trabalhando cria tabelas todos os dias, então eu terei hst070810, hst070910, hst071010, e assim por diante como minhas tabelas que eu preciso atualizar.

Eu quero fazer algo que irá criar um arquivo sql e, em seguida, executá-lo e, em seguida, ir fazer isso de novo e de novo por um determinado número de vezes, em um loop for.

#!/bin/bash
for x in {1..11}
do
    echo "
    update hst'date --date='$x days ago' +%m%d%y' 
       set x = 'Complete' 
     where y = 1;
    " > update_x_hst.sql
    chmod 777 update_x_hst.sql
    isql -s history_hst update_x_hst.sql
    rm update_x_hst.sql
done

O problema aqui é que ele não quer ler a variável $ x corretamente, então a instrução falha.

Alguma ideia?

    
por rumz 29.07.2010 / 00:36

1 resposta

1

As variáveis não são expandidas entre aspas simples. Altere-as para aspas duplas e isso funcionará.

#!/bin/bash
for x in {1..11}
do
    echo "
    update hst$(date --date="$x days ago" +%m%d%y)
       set x = 'Complete' 
     where y = 1;
    " > update_x_hst.sql
    chmod 777 update_x_hst.sql
    isql -s history_hst update_x_hst.sql
    rm update_x_hst.sql
done

Além disso, você deve definir a permissão para algo mais apropriado. Não é provável que o 777 seja necessário.

Não tenho certeza, mas você provavelmente pode canalizar esse SQL para isql e evitar criar, chmoding e rming um arquivo temporário.

echo "something" | isql ...
    
por 29.07.2010 / 00:51

Tags