2016-11-03 52 views
0

我正在嘗試grep用戶的bashrc以檢查一行是否已經存在。 我已經試過這樣:其他用戶的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)?

回答

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命令的退出代碼來確定表達式的「真值」。