
大家好
目的:檢查文件中是否存在字串並相應地運行操作
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"
。