这个命令行有什么问题(Centos 7):
if (grep ssl_certificate /etc/nginx/conf.d/platform.conf)
then echo $(grep ssl_certc /etc/nginx/conf.d/file.conf) > /etc/nginx/conf.d/file-certs.conf
fi
在 file.conf 中有 2 行包含 ssl_certificate 和 ssl_certificate_key。它应该将现有的 SSL 证书从 /etc/nginx/conf.d/file.conf 移动到 /etc/nginx/conf.d/file-certs.conf。
答案1
没有什么句法上代码片段有错误,但很不寻常。
要使用 测试是否在文件中找到字符串grep
,如果是的话执行某些操作,请使用
if grep -qwF ssl_certificate /etc/nginx/conf.d/platform.conf; then
选项-q
,-w
和-F
将使grep
安静 ( -q
) 并将给定模式作为固定字符串而不是正则表达式 ( -F
) 进行匹配。此外,-w
将grep
寻找完整的单词。在这种情况下,该字符串ssl_certificate3
将不是匹配模式。
grep
如果在文件中找到该字符串,将返回零退出状态,并且语句的主体if
将被执行。
该声明
echo $(somecommand)
有点没用。
命令替换$(somecommand)
将被 的输出替换somecommand
,并且 shell 将对结果字符串执行分词和文件名生成(这可能是不需要的)。使用它echo
是没有用的,因为你本来可以这样做
somecommand
完整的if
声明:
if grep -qwF ssl_certificate /etc/nginx/conf.d/platform.conf; then
grep -wF ssl_certc /etc/nginx/conf.d/file.conf >/etc/nginx/conf.d/file-certs.conf
fi
(这假设这ssl_certc
是一个完整的单词。否则-w
从该单词中删除grep
)
或者,使用短路语法,
grep -qwF ssl_certificate /etc/nginx/conf.d/platform.conf &&
grep -wF ssl_certc /etc/nginx/conf.d/file.conf >/etc/nginx/conf.d/file-certs.conf
请注意,这将覆盖/etc/nginx/conf.d/file-certs.conf
该文件是否存在的内容。更改>
为>>
至附加如果不打算覆盖,则改为写入文件。