将另一个文件中的变量调用到bash脚本中

将另一个文件中的变量调用到bash脚本中,bash,variables,export,Bash,Variables,Export,我已经仔细研究了类似的问题,但找不到有效的方法,不知道您是否能帮忙 我正在尝试执行以下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.geneSy

我已经仔细研究了类似的问题,但找不到有效的方法,不知道您是否能帮忙

我正在尝试执行以下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+1000000<K.txStart))
right join kgXref as G on
 (K.name=G.kgID)
where
  S.name in ("snp_permutation"$i".txt")'| awk -F '|' '{print $1}' | sed 1d | awk '{print $7}' | sort -u > permutation"$i"_genelist.txt
为了让这个脚本工作,我需要文件的实际内容,例如rs16574876,在snp_permutation$I.txt'中S.name中的引号之间,而不是文件本身的名称

我需要为此使用源还是导出

谢谢你的帮助

这个怎么样

#!/bin/bash

template=$(cat <<'END'
    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+1000000<K.txStart))
    right join kgXref as G on
        (K.name=G.kgID)
    where
        S.name in (%s)
END
)

for (( i=0; i <= 10000; i++ )); do
    printf -v sql "$template" "$(< "snp_permutation${i}.txt")"
    mysql --user=genome --host=genome-mysql.cse.ucsc.edu -A -D hg19 -e "$sql" |
      awk -F '|' 'NR > 1 {split($1, a, " "); print a[7]}' | 
      sort -u > "permutation${i}_genelist.txt"
done

这将使用美元,通过从小处着手,逐步扩大规模,为自己节省大量的麻烦。目前,您必须同时调试bash、awk、sed和mysql。而是从一些琐碎的事情开始,比如i=1;echo“值为snp_permutation$i.txt”,然后解决每个问题,直到您让它写入值为42为止。但要回答您的问题:不,您不需要也不能为此使用源代码或导出。这看起来很有希望-我们将尝试一下。谢谢。我试过前四种排列,每一行,我收到一条错误消息:第1行的错误1054 42S22:第1行的错误1054 42S22:第1行的错误1054 42S22:第1行的错误1054 42S22:第1行的错误1054 42S22:第1行的错误1054 42S22中的未知列:第1行的错误1054 42S22中的未知列“rs72795184”中的未知列“where子句”有什么想法吗?哦,未引用该值。在模板中,您希望最后一行读取“%S”中的S.name,并且您需要做更多的工作来防止shell for循环中的SQL注入。这很好-似乎工作得很好。再次感谢你,格伦-非常感谢。认真对待sql注入。包含foo′的snp_置换文件;升降台snp138;-那将是灾难性的。
#!/bin/bash

template=$(cat <<'END'
    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+1000000<K.txStart))
    right join kgXref as G on
        (K.name=G.kgID)
    where
        S.name in (%s)
END
)

for (( i=0; i <= 10000; i++ )); do
    printf -v sql "$template" "$(< "snp_permutation${i}.txt")"
    mysql --user=genome --host=genome-mysql.cse.ucsc.edu -A -D hg19 -e "$sql" |
      awk -F '|' 'NR > 1 {split($1, a, " "); print a[7]}' | 
      sort -u > "permutation${i}_genelist.txt"
done