当我们的服务器启动时,我们需要检查文件以查看服务器的配置方式.
我们想在/etc/aws/hosts.conf文件中搜索以下字符串:
MYSQL_ROLE=master
Run Code Online (Sandbox Code Playgroud)
然后,我们要测试该字符串是否存在,并使用if/else语句运行两个选项之一,具体取决于字符串是否存在.
if语句的BASH语法是什么?
if [ ????? ]; then
#do one thing
else
#do another thing
fi
Run Code Online (Sandbox Code Playgroud)
小智 196
从grep --help,也见男人grep:
如果选择了任何行,则退出状态为0,否则为1; 如果发生任何错误且未给出-q,则退出状态为2.
if grep --quiet MYSQL_ROLE=master /etc/aws/hosts.conf; then
echo exists
else
echo not found
fi
Run Code Online (Sandbox Code Playgroud)
您可能希望使用更具体的正则表达式,例如^MYSQL_ROLE=master$,避免注释中的字符串,仅以"master"开头的名称等.
这是因为if接受命令并运行它,并使用该命令的返回值来决定如何继续,零意味为真,非零意味着假 - 与shell如何解释其他返回代码相同,和C之类的语言相反
Ign*_*ams 31
if接受命令并检查其返回值.[只是一个命令.
if grep -q ...
then
....
else
....
fi
Run Code Online (Sandbox Code Playgroud)
vla*_*adr 23
请注意,对于PIPE任何命令或命令序列,则:
if PIPE ; then
# do one thing if PIPE returned with zero status ($?=0)
else
# do another thing if PIPE returned with non-zero status ($?!=0), e.g. error
fi
Run Code Online (Sandbox Code Playgroud)
为了记录,[ expr ]是一个内置的†速记test expr.
因为grep在匹配的情况下返回状态为0,而在没有匹配的情况下返回非零状态,您可以使用:
if grep -lq '^MYSQL_ROLE=master' ; then
# do one thing
else
# do another thing
fi
Run Code Online (Sandbox Code Playgroud)
注意其使用-l仅关注具有至少一个匹配的文件(因此grep一旦找到一个匹配就返回,而不必不必要地继续解析输入文件.)
† 在某些平台上[ expr ]是不是内置的,但实际的可执行文件/bin/[(其最后一个参数会]),这就是为什么[ expr ]应该包含前后的方括号的空白,以及为什么它必须遵循的命令列表分隔符的一个(;,&&,||,|,&, 新队)
| 归档时间: |
|
| 查看次数: |
194389 次 |
| 最近记录: |