用于检查变量的其他用户的grep bashrc

时间:2016-11-03 16:01:28

标签: bash syntax-error

我正在尝试grep用户的bashrc以检查一行是否已存在。 我试过这个:

if [ [ su - ${1} -c "cat ~/.bashrc | grep ${2} | wc -c | tr -d ' '"  ] -gt 0 ]
if [ su - ${1} -c "cat ~/.bashrc | grep ${2} | wc -c | tr -d ' '"  ]

$ 1是用户名

$ 2是VarName

在exec中

+ '[' su - user -c 'cat ~/.bahsrc | grep PATH | wc -c | tr -d '\'' '\''' ']'
line xxx: [: too many arguments

有可能这样做吗?我是否需要使用返回值(实际上$? = 0为所有)?

1 个答案:

答案 0 :(得分:2)

如果您只是检查存在行,则无需涉及wctr或其他任何内容;这应该足够了:

if su - ${1} -c "grep -q '${2}' ~/.bashrc" ; then
  echo line exists in file
else
  echo line does not exist in file
fi

如果在line exists in file中找到$2的内容,则会回显~/.bashrc

为了帮助理解这里发生了什么,请记住if语句的语法是(来自bash手册页):

if list; then list; [ elif list; then list; ] ... [ else list; ] fi

其中list是一个或多个命令。在这种情况下,我们使用grep命令中的退出代码来确定表达式的“真实性”。