如何将变量传递给已经转义的函数?

如何将变量传递给已经转义的函数?

我想要做的是创建多个 informix sql 语句并然后通过 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

单引号内的变量不会展开。将其更改为双引号即可。

#!/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并避免创建、更改模式和 rm 临时文件。

echo "something" | isql ...

相关内容