使用 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"

相關內容