使用 cat | 检查文件中是否存在字符串grep

使用 cat | 检查文件中是否存在字符串grep

大家好

目的:检查文件中是否存在字符串并相应地运行操作

if [ -z 'sudo cat /etc/sudoers | grep "$USER ALL=(ALL) NOPASSWD:ALL"' ]; echo "no output, cont." || echo "line exists, skipping"

在行存在和不存在的机器人情况下,输出始终显示“行存在,跳过”。

将输出添加到变量(例如 x)中,用该变量替换 if 语句中的行会产生正确的输出,

我如何“跳过”变量路由并直接运行命令?

答案1

grep可以用作条件命令。当模式匹配时它返回 true。在这里,您需要固定字符串搜索 ( -F) 并且可能在整行 ( -x) 上进行匹配:

if sudo cat /etc/sudoers |
  grep -xqFe "$USER ALL=(ALL) NOPASSWD:ALL"
then
  echo found
else
  echo not found
fi

或者,如果sudoers配置允许您运行grep除以下命令之外的命令cat

if sudo grep -xqFe "$USER ALL=(ALL) NOPASSWD:ALL" /etc/sudoers
then
  echo found
else
  echo not found
fi

-q告诉grep保持安静,仅通过退出状态返回真/假状态,但不在标准输出上输出任何内容。

请注意,sudoers 配置可以包含该方法不会考虑的其他配置文件。对于授予用户所属组的权限也是如此。

您可能想改用sudo -lU "$USER"

相关内容