我想要做的是创建多个 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 ...