我需要编写一个shell脚本来检查/ etc / sudoers文件中是否存在条目
这是我需要检查的模式 nimbus ALL =(ALL)NOPASSWD:ALL
在这种模式中,单词标签空间是
如何找到文件/ etc / sudoers中存在的模式或不使用仅来自root用户的linux shell脚本
SomeString='nimbus ALL=(ALL) NOPASSWD:ALL'
File=sudoers
echo $File
echo -e $SomeString
if grep -q $SomeString "$File"; then
echo "line found"
else
echo "line not found"
fi
错误我得到了grep:ALL =(ALL):没有这样的文件或目录grep:NOPASSWD:ALL:没有这样的文件或目录
请在这方面帮助我
感谢 Sagar的
答案 0 :(得分:1)
您的脚本存在的问题是,您没有转发(\
)元字符(在这种情况下为(
和)
)grep
来识别它们因为它们有特殊的含义。
引用变量也可以防止分词和全局扩展,并且当输入包含空格,换行符,glob字符等时,可以防止脚本中断。
脚本的修改版本应该像
#!/bin/bash
SomeString='nimbus ALL=\(ALL\) NOPASSWD:ALL' # Notice the '\' of the characters
File=sudoers
echo "$File"
echo -e "$SomeString"
if grep -qE "$SomeString" "$File"; then
echo "line found"
else
echo "line not found"
fi
通过此更改,您的脚本可以正常运行。
$ cat sudoers
nimbus ALL=(ALL) NOPASSWD:ALL
foo
bar
foobar
$ ./script.sh
sudoers
nimbus ALL=\(ALL\) NOPASSWD:ALL
line found