我寫了一個名爲「isinFile.sh」的小bash腳本,用於檢查是否可以在文件「file.txt」中找到給腳本的第一個術語:如何防止在bash腳本中的代碼/選項注入
#!/bin/bash
FILE="file.txt"
if [ `grep -w "$1" $FILE` ]; then
echo "true"
else
echo "false"
fi
但是,運行腳本類似
> ./isinFile.sh -x
斷腳本,因爲-x
由grep
解釋爲一個選項。 所以我用--
作爲參數傳遞給grep提高了我的腳本
#!/bin/bash
FILE="file.txt"
if [ `grep -w -- "$1" $FILE` ]; then
echo "true"
else
echo "false"
fi
。現在正在運行
> ./isinFile.sh -x
false
的作品。但是使用--
正確且唯一的方法來阻止bash腳本中的代碼/選項注入?我沒有看到它在野外,只發現它在ABASH: Finding Bugs in Bash Scripts中提到。
爲什麼在'['中使用反引號而不是直接使用'grep -q'? – 2010-06-10 08:51:16
我嘗試了你的建議,但是 'if [grep -q -w - 「$ 1」$ ACCOUNTS_DGRID]; '不適合我。我得到錯誤,如'./isinFile.sh:第5行:[:太多參數' – asmaier 2010-06-10 09:04:08
他的意思是沒有方括號,也:'如果grep -q -w - 「$ 1」$ ACCOUNTS_DGRID' – 2010-06-10 12:46:53