“太多的参数”检查条件并执行某些操作,以防它不是真的?
我编辑了我的sudoers
文件,以允许我的非root用户运行sudo
命令而不提示输入密码。 在vim
,如何创建一个检查此条件是否为真的函数,如果不是,则提示用户是否希望脚本编辑并保存sudoers
文件以使此条件成立?
如果条件为真,则继续使用其余的脚本。 如果condition不成立,则脚本静默编辑/添加行: %sudo ALL=(ALL:ALL) NOPASSWD: ALL
在sudoers
文件中的%sudo ALL=(ALL:ALL) NOPASSWD: ALL
,保存然后继续使用脚本的下一部分。
所以我开始使用代码编写函数:
... #lines 1-5 passChk() { passPut="%sudo ALL=(ALL:ALL) NOPASSWD:ALL"; passRd=sudo grep -is "$passPut" --file=/etc/sudoers; if [ $passRd == $passPut ]; then #if sudoers already contains line from $passPut, #exit passChk and proceed to pkgFetch. pgkFetch; else echo "You will be prompted for user password. Do you want to temporarily disable this?"; read answer; fi if [ $answer !="y" ] || [ $answer !="n" ]; then null elif [ $answer ="y" ]; then $passPut|tee -a > /etc/sudoers elif [ $answer ="n" ]; then pkgFetch; fi; clear; }; passChk;
if [ $passRd = $passPut ]; then pkgFetch; [: too many arguements
我在第9行收到错误if [ $passRd = $passPut ]; then pkgFetch; [: too many arguements
if [ $passRd = $passPut ]; then pkgFetch; [: too many arguements
if [ $passRd = $passPut ]; then pkgFetch; [: too many arguements
。 我不明白。 我正在尝试测试$passRd
中的目录$passRd
包含来自$passPut
字符串。 我究竟做错了什么?
-
“bash cookbook”是一个很好的资源,你可以在线获得基础知识,但是当你按下时间时,这将节省你的屁股。
-
永远不要在你打算成为字符串的东西上使用双引号,例如不受bash替换,因此passput line应该是单引号。
-
始终在测试构造[],[[]],(())等中引用变量引用。如果不这样做,可能会发生不好的事情,请阅读它。 首选构造是:
[“$ {passRd}”=“$ {passPut}”]
-
函数调用后的分号是不必要的,并且使代码混乱。
-
man test ,测试调用中的每个参数之间必须有空格。
-
在CLI上设置-x或将-x传递给#!/ bin / bash以协助调试,有关详细信息,请参阅帮助集 。
本书可能是在Ubuntu中学习Bash Scripting的最佳资源。