Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在shell脚本中处理引号_Linux_Shell - Fatal编程技术网

Linux 如何在shell脚本中处理引号

Linux 如何在shell脚本中处理引号,linux,shell,Linux,Shell,从中,我可以获得OracleJDK的wget url。 我打算在脚本中使用它 wget_opts="-c --no-check-certificate --no-cookies --header --load-cookies="Cookie: oraclelicense=accept-securebackup-cookie"" jdk_download_url="http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux

从中,我可以获得OracleJDK的wget url。 我打算在脚本中使用它

wget_opts="-c --no-check-certificate --no-cookies --header --load-cookies="Cookie: oraclelicense=accept-securebackup-cookie""
jdk_download_url="http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz"

/usr/bin/wget $wget_opts $jdk_download_url
当我回显上述命令时,它看起来正常,并且能够正确下载文件。 但是在脚本中运行该命令时,我得到以下结果

--2014-06-04 14:19:43--  http://oraclelicense=accept-securebackup-cookie%22/
Resolving oraclelicense=accept-securebackup-cookie"... failed: Name or service not known.
wget: unable to resolve host address “oraclelicense=accept-securebackup-cookie"”
--2014-06-04 14:20:03--  http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz
Resolving download.oracle.com...
Wget获取了错误的URL

如何更正此问题?

尝试以下方法:

wget_opts='-c --no-check-certificate --no-cookies --header --load-cookies="Cookie: oraclelicense=accept-securebackup-cookie"'
jdk_download_url="http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz"

/usr/bin/wget $wget_opts $jdk_download_url
检查中单引号和双引号之间的差异

编辑:事实上,您的wget命令行中有一些错误。这是正确的一行

OPTS="-c --no-check-certificate --no-cookies --header Cookie:oraclelicense=accept-securebackup-cookie"
URL="http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz"

wget $OPTS $URL
--load cookies
选项将文件作为参数而不是字符串。我们必须将
--header
选项与
Cookie:oraclelicense=accept securebackup Cookie
一起使用。经过测试,我发现
wget
不关心header字段中的空格。因此,我们可以直接使用Cookie:oraclelicense=accept securebackup Cookie

如果使用
--debug
选项,您将看到正确的格式化请求:

GET /otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz HTTP/1.1
Range: bytes=5307-
User-Agent: Wget/1.15 (linux-gnu)
Accept: */*
Host: download.oracle.com
Connection: Keep-Alive
Cookie: oraclelicense=accept-securebackup-cookie
试试这个:

wget_opts='-c --no-check-certificate --no-cookies --header --load-cookies="Cookie: oraclelicense=accept-securebackup-cookie"'
jdk_download_url="http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz"

/usr/bin/wget $wget_opts $jdk_download_url
检查中单引号和双引号之间的差异

编辑:事实上,您的wget命令行中有一些错误。这是正确的一行

OPTS="-c --no-check-certificate --no-cookies --header Cookie:oraclelicense=accept-securebackup-cookie"
URL="http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz"

wget $OPTS $URL
--load cookies
选项将文件作为参数而不是字符串。我们必须将
--header
选项与
Cookie:oraclelicense=accept securebackup Cookie
一起使用。经过测试,我发现
wget
不关心header字段中的空格。因此,我们可以直接使用Cookie:oraclelicense=accept securebackup Cookie

如果使用
--debug
选项,您将看到正确的格式化请求:

GET /otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz HTTP/1.1
Range: bytes=5307-
User-Agent: Wget/1.15 (linux-gnu)
Accept: */*
Host: download.oracle.com
Connection: Keep-Alive
Cookie: oraclelicense=accept-securebackup-cookie

您需要转义其他双引号中的双引号:

wget_opts="-c --no-check-certificate --no-cookies --header --load-cookies=\"Cookie: oraclelicense=accept-securebackup-cookie\""
如果不需要变量插值,请将字符串括在单引号中:

wget_opts='-c --no-check-certificate --no-cookies --header --load-cookies="Cookie: oraclelicense=accept-securebackup-cookie"'
另外,在您的命令中,您需要在
jdk\u下载\u url
前面添加一个
$

/usr/bin/wget $wget_opts $jdk_download_url

您需要转义其他双引号中的双引号:

wget_opts="-c --no-check-certificate --no-cookies --header --load-cookies=\"Cookie: oraclelicense=accept-securebackup-cookie\""
如果不需要变量插值,请将字符串括在单引号中:

wget_opts='-c --no-check-certificate --no-cookies --header --load-cookies="Cookie: oraclelicense=accept-securebackup-cookie"'
另外,在您的命令中,您需要在
jdk\u下载\u url
前面添加一个
$

/usr/bin/wget $wget_opts $jdk_download_url
使用数组:

wget_opts=( -c 
            --no-check-certificate 
            --no-cookies 
            --header 
            --load-cookies="Cookie: oraclelicense=accept-securebackup-cookie" 
          )
jdk_download_url="http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz"

# use the exact quoting below
/usr/bin/wget "${wget_opts[@]}" "$jdk_download_url"
使用数组:

wget_opts=( -c 
            --no-check-certificate 
            --no-cookies 
            --header 
            --load-cookies="Cookie: oraclelicense=accept-securebackup-cookie" 
          )
jdk_download_url="http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz"

# use the exact quoting below
/usr/bin/wget "${wget_opts[@]}" "$jdk_download_url"

丢失的美元是问题中的一种类型。我尝试了以上两种方法,但都没有成功。缺少的美元是问题中的一种类型。我尝试了以上两个选项,但都没有成功。请参见@glenn,我得到了“第30行:-c--无检查证书--无Cookie--标题--加载Cookie=“Cookie:oraclelicense=accept securebackup Cookie”:未找到命令“您使用什么shell来运行此脚本?”?使用bash或ksh@glenn. 我使用bash。我改正了一个小错误。wget运行得很好,但是由于下载链接重定向到错误页面,因此没有拾取标题。错误页面是因为没有正确的标题。如果我有wget=/usr/bin/wget if有关系吗$wget“${wget_opts[@]}”“$jdk_下载url”;然后请参见@glenn,我得到“第30行:-c--无检查证书--无Cookie--标题--加载Cookie=“Cookie:oraclelicense=accept securebackup Cookie”:未找到命令“您使用什么shell来运行此脚本?”?使用bash或ksh@glenn. 我使用bash。我改正了一个小错误。wget运行得很好,但是由于下载链接重定向到错误页面,因此没有拾取标题。错误页面是因为没有正确的标题。如果我有wget=/usr/bin/wget if有关系吗$wget“${wget_opts[@]}”“$jdk_下载url”;然后@jml没有,至少在Bash3.2.25中没有。它扩展到以下内容:
/usr/bin/wget-c--无检查证书--无Cookie--header'--load cookies=“Cookie:”oraclelicense=accept securebackup Cookie”'http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz
@jml不,它没有,至少在bash 3.2.25中没有。它扩展到以下内容:
/usr/bin/wget-c--无检查证书--无Cookie--header'--load cookies=“Cookie:”oraclelicense=accept securebackup Cookie”'http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz