大家好
目的:检查文件中是否存在字符串并相应地运行操作
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"
。