多条if条件bash

时间:2017-05-17 11:33:39

标签: bash

所以我需要一个带有两个条件的if语句:

if [[ $(cat /etc/hosts.deny 2>/dev/null) != *"ALL"* ]]; then
if [[ $(cat /etc/hosts.allow 2>/dev/null) != *"123.123.123.123"* ]]; then

如果两个条件都正确,它应该回显/etc/hosts.allow中的IP。 我尝试将两个字符串设置为1行&&之间但由于某种原因不起作用。有人能够指出我做错了什么吗?

2 个答案:

答案 0 :(得分:1)

请勿使用cat;只需使用grep

if grep -qvF 'ALL' /etc/hosts.deny && grep -qvF '123.123.123.123' /etc/hosts.allow; then 
  • -q抑制输出;你不关心哪些行包含匹配的模式,只有grep的退出状态为0或非零。
  • -v反转退出状态;如果模式匹配,则grep成功。
  • -F将参数视为固定字符串,而不是正则表达式。这样可以避免转义.以匹配文字句点,并且效率更高。
  • &&仅当两个 grep命令的退出状态为0时才会创建一个存在状态为0的列表,并且仅运行第二个如果第一个grep成功,则grep

答案 1 :(得分:0)

正如您所做的那样,使用double [将表达式插入到&&||内作为逻辑运算符

if [[ $(cat /etc/hosts.deny 2>/dev/null) != *"ALL"* && $(cat /etc/hosts.allow 2>/dev/null) != *"123.123.123.123"* ]] ; then ...

使用bash 4.2,但不是所有shell。

修改:请注意[if&&

之间的空格