在shell脚本中读取命令

时间:2012-10-26 09:54:47

标签: shell

我有这个脚本:

    echo -e ">> Please, insert edition folder name: ";
    read editionfolder;
    RSeditionfolder="$editionfolder";    
    sh -c $POSTGRESbin'psql -U '$POSTGRESuser' -h localhost -d '$POSTGRESdb' -c "select count(*) from d3_folders where folder_name = '\'$RSeditionfolder\'';"' > $queryFolder$tmpFile

例如,如果我在editionfolder中插入var:CD_199 FOTOS我收到错误:

FOTOS';": -c: line 0: unexpected EOF while looking for matching `"'
FOTOS';": -c: line 1: syntax error: unexpected end of file

$ queryFolder有“query /”值而$ tmpFile有“tmpfile”

但我不知道我做错了什么。

此查询的结果是:

 count 
-------
     0
(1 row)

在这种情况下,我只想要数字0。我正在试图将结果放在一个文件中,下一步是在这个文件中使用sed,我知道其他方式我会非常感谢知道它。

谢谢!!

2 个答案:

答案 0 :(得分:0)

忽略sh -c ...中的所有单引号,并用双引号引用整个命令:

sh -c "$POSTGRESbin/psql -U $POSTGRESus -h ..."

双引号确保只有一个参数同时允许替换shell变量。

答案 1 :(得分:0)

给定的命令有点乱,我会像

那样写
sh -c "${POSTGRESbin}psql -U $POSTGRESuser -h localhost -d $POSTGRESdb -c \"select count(*) from d3_folders where folder_name = '$RSeditionfolder';\"" > ${queryFolder}${tmpFile}

首先,我会在双引号内使用$ -variables删除所有单引号。其次,使用显式变量名称边界${queryFolder}${tmpFile}来澄清子句'$ queryFolder $ tmpFile'会很好。但总的来说,剧本很好。