You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash脚本中调用其他文件中的变量?技术求助

求助解答:Bash脚本调用外部变量及SQL查询优化

我已查阅大量同类问题,但未找到可行解决方案,恳请协助。我需在以下Bash脚本中调用其他文件的变量,目前正尝试执行该脚本:

#!/bin/bash
for i in {0..10000}
do
mysql --user=genome --host=genome-mysql.cse.ucsc.edu -A -D hg19 -e '
Select S.name as rsID, S.chrom, S.chromEnd, S.chromStart, K.txStart, K.txEnd, G.geneSymbol, G.kgID
from snp138 as S
left join knownGene as K on (S.chrom=K.chrom and not(K.txEnd+1000000<S.chromStart or S.chromEnd+1...
'
done

针对你的需求,我整理了两种在Bash脚本中调用外部文件变量的实用方法,顺便给你提些SQL执行的优化建议:

一、加载外部文件变量的两种方式

假设你有个存放变量的配置文件(比如命名为db_config.sh),内容像这样:

# db_config.sh
DB_USER="genome"
DB_HOST="genome-mysql.cse.ucsc.edu"
DB_DB="hg19"

1. 用source命令直接加载

这是最常用的方式,在你的脚本开头加上一行,就能直接使用配置文件里的变量:

#!/bin/bash
# 加载外部配置文件,替换成你的实际路径
source ./db_config.sh

for i in {0..10000}
do
mysql --user="$DB_USER" --host="$DB_HOST" -A -D "$DB_DB" -e '
Select S.name as rsID, S.chrom, S.chromEnd, S.chromStart, K.txStart, K.txEnd, G.geneSymbol, G.kgID
from snp138 as S
left join knownGene as K on (S.chrom=K.chrom and not(K.txEnd+1000000<S.chromStart or S.chromEnd+1...
'
done

source也可以用简写.,比如./db_config.sh,效果完全一样。

2. 命令行参数传递变量

如果你的变量不需要存在配置文件里,想每次执行脚本时临时传入,就可以用命令行参数:
执行脚本的时候这样传参:

./your_script.sh genome genome-mysql.cse.ucsc.edu hg19

然后脚本里用$1、$2、$3获取对应的变量:

#!/bin/bash
# 从命令行参数获取变量
DB_USER="$1"
DB_HOST="$2"
DB_DB="$3"

for i in {0..10000}
do
mysql --user="$DB_USER" --host="$DB_HOST" -A -D "$DB_DB" -e '
Select S.name as rsID, S.chrom, S.chromEnd, S.chromStart, K.txStart, K.txEnd, G.geneSymbol, G.kgID
from snp138 as S
left join knownGene as K on (S.chrom=K.chrom and not(K.txEnd+1000000<S.chromStart or S.chromEnd+1...
'
done

二、额外的优化建议

  1. 补全SQL语句:你提供的SQL语句末尾是S.chromEnd+1...,明显被截断了,一定要补全完整的条件和语句,否则mysql会报错无法执行。
  2. 优化循环查询:循环10001次去连接数据库,效率非常低,而且可能会被UCSC的数据库限制请求频率。建议尽量把循环的逻辑整合到SQL语句里,一次查询完成任务;如果必须循环,记得在每次循环后加个sleep 1之类的延迟,避免给数据库造成过大压力。

内容的提问来源于stack exchange,提问作者GB44444

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:48:42