简体   繁体   English

Shell 脚本和 sed 命令

[英]Shell script and sed commands

I have a shell script where I am executing a SQL query like so -我有一个 shell 脚本,我正在执行 SQL 查询,如下所示 -

query=$(cat <<all
SELECT
    provider_rendering_npi
INTO table
FROM service sl
WHERE bucket = 'bucket'
AND month_id >= (SELECT month FROM annual);
all
)

sql=$(echo $query | sed -e "s/bucket/$bucket_name/g ; s/table/$directory/g")

psql -h server -U user db -c "$sql"

Based on a condition, I would like to modify the query variable.根据一个条件,我想修改query变量。 For example, if the $bucket_name contains no_inp , I would like to modify query to be例如,如果$bucket_name包含no_inp ,我想将query修改为

query=$(cat <<all
SELECT
    provider_rendering_npi
INTO table
FROM service sl
WHERE bucket = 'bucket'
AND month_id >= (SELECT month FROM annual)
AND st_info = 'no_inp';
all
)

Is there a way to do this without duplicating code?有没有办法在不复制代码的情况下做到这一点?

Create a function parameterized on the optional query expression ( expr ):创建一个在可选查询表达式 ( expr ) 上参数化的 function:

query() {
  local expr=$1
  local newline=$'\n';
  cat <<EOF
SELECT
    provider_rendering_npi
INTO table
FROM service sl
WHERE bucket = 'bucket'
AND month_id >= (SELECT month FROM annual)${expr:+$newline}$1
EOF
}

query
query "AND st_info = 'no_inp'"

It's usually easier to assemble things from parts instead patching a whole.通常从零件组装东西而不是修补整体更容易。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM