我是创建sh脚本的新手。我正在尝试创建一个.sh脚本,它将接受用户输入,并通过更新用户给出的参数来执行一个SQL脚本。
用户输入仅限于单个参数。要传递的参数是作业id -
Enter job id: 321
Confirm job id: 321此作业id用于SQL代码的不同部分,代码摘录如下-
CREATE READABLE EXTERNAL TEMP TABLE JOBID_USER (
cola numeric,
colb bigint,
)
LOCATION (
'gpfdist://.../JOBID_USER_INFO_321.txt' --the job id is at the end of the file
)
FORMAT 'text' (header delimiter e',' null '' escape 'off')
ENCODING 'latin9';
-------------------------------------------------------------------------------------------
CREATE TABLE AS
SELECT * FROM schema.deliverytable_321 -- the job id is used to identify a table
WHERE JOB_ID= 321 -- the job id is used as a condition
AND asset_1 = 9999
DISTRIBUTE RANDOMLY; 数据库是Postgres,我在Greenplum中手动执行脚本。任何帮助都将不胜感激。谢谢。
发布于 2020-07-16 17:51:18
这只是一个简单的想法。
将sql查询写在名为sample.sql的文件或其他文件中:
注:已将JobID替换为MY_VAR
CREATE READABLE EXTERNAL TEMP TABLE JOBID_USER (
cola numeric,
colb bigint,
)
LOCATION (
'gpfdist://.../JOBID_USER_INFO_MY_VAR.txt' --the job id is at the end of the file
)
FORMAT 'text' (header delimiter e',' null '' escape 'off')
ENCODING 'latin9';
-------------------------------------------------------------------------------------------
CREATE TABLE AS
SELECT * FROM schema.deliverytable_MY_VAR -- the job id is used to identify a table
WHERE JOB_ID= MY_VAR -- the job id is used as a condition
AND asset_1 = 9999
DISTRIBUTE RANDOMLY;现在使用这个名为sql_executor.sh的脚本:
#!/bin/bash
sed "s/MY_VAR/$1" sample.sql | psql -U [USERNAME] -d [DATABASE_NAME]用法:
sql_executor.sh 321发布于 2020-07-16 17:31:02
这就是如何在bash中以交互方式获得输入
#!/bin/bash
printf "Enter job id:"
read -r JOBID
printf "Confirm job id:"
read -r JOBIDCONFIRM
[ "$JOBID" != "$JOBIDCONFIRM" ] && {
echo "Jobid inputs have not the same value"
exit
}
echo "Now you can use your jobid $JOBID anywhere in double quoted strings, like this sentence"解释:
printf:回显字符串
read varname:等待用户输入并将其赋给varname变量
发布于 2020-07-16 23:07:32
psql有可用于参数的“变量”。例如:
cat foo.sql
select :param1SQL文件中的冒号表示它是一个变量。
要使用这个变量,只需使用psql传递一个值给它。
psql -f foo.sql -v param1="'bar'"
?column?
----------
bar
(1 row)要从bash脚本执行此命令,可以使用bash变量。
cat runme.sql
#!/bin/bash
param1="$1"
psql -f foo.sql -v param1="'$param1'"注意:一定要对runme.sql进行chmod,这样才能执行它。
chmod 755 runme.sql现在运行它。
./runme.sql foobar
?column?
----------
foobar
(1 row)https://stackoverflow.com/questions/62931446
复制相似问题