То, что я хочу сделать, это создать несколько операторов SQL Informix и позже запустить их через скрипт Bash.

Вот что у меня пока есть (это работает), но оно предназначено для запуска из задания cron, поэтому оно выполняется только один день за раз:

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

Я должен делать это таким образом, потому что система, с которой я работаю, создает таблицы каждый день, поэтому у меня будут hst070810, hst070910, hst071010 и так далее, в качестве моих таблиц, которые мне нужно обновить.

Я хочу сделать что-то, что создаст файл sql и затем запустит его, а затем иди делать это снова и снова в течение заданного числа раз в цикле 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

Проблема здесь в том, что он не хочет правильно читать переменную $ x, поэтому оператор не выполняется.

Есть идеи?

1 ответ1

1

Переменные не раскрываются в одинарных кавычках. Измените их на двойные кавычки, и это будет работать.

#!/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

Кроме того, вы должны установить разрешение на что-то более подходящее. Маловероятно, что 777 необходимо.

Я не уверен, но вы, вероятно, можете направить этот SQL в isql и избежать создания, изменения и временного файла временного файла.

echo "something" | isql ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .