我正在尝试编写一个Bash脚本,如果用户无法获得安全问题,则会将用户注销。
我需要找到一个数组或多个if条件来反映这一点。我知道有很多子东西,比如停止任何覆盖输入(CTRL + Z等)。
下面是我到目前为止的脚本,我收到以下错误。我不想要答案,只是想要寻找的方向。它甚至没有提示安全问题,只是在这种情况下直接记录root用户。
./txtscript: line 13: [: =: unary operator expected
#!/bin/bash
echo "What is your name?"
read ISNAME
if [ $ISNAME = "root" ];
then
echo "Nice to meet you, root."
echo "Login as root" | mail -s "Login for root" root
echo "Next for the Security Question! "
fi
echo "What is the codename?"
if [ $codename = "Cole Server" ];
then
echo "Hello, Welcome"
else
echo "Away from me, Not Root"
echo "Unauthorized" | mail -s "INTRUDER ALERT" root
pkill -KILL -u $ISNAME;
fi
***** ******* UPDATE
好吧,所以我把那部分修好了。现在该脚本具有以下内容。
回声"代号是什么?" 阅读CODEAME 如果[$ CODENAME =" Cole Server" ]。 然后当我运行脚本时,我收到错误" ./ txtscript:第14行:[:=:一元运算符预期"
第14行是:if [$ CODENAME =" Cole Server" ];
总的来说,我甚至没有找到一个好的网站/文章,真正解释了一元运营商的预期错误,所以我不知道这意味着什么。非常感谢任何帮助。
答案 0 :(得分:2)
嗯,问题是$codename
没有填写。
第13行正在运行:
if [ = "Cole Server" ]; # note: the $codename was expanded to emptiness
您要在脚本中写下的内容是:
if [ "$codename" = "Cole Server"];
这将评估为
if [ "" = "Cole Server"];
至少在语法上有效。您仍然需要在某个地方实际分配到codename
,而您当前没有这样做。
但是,我认为整个方法可能是错误的。
你正在给他们一个互动的bash会话,他们可以在那里做各种各样的事情 - 比如按Ctrl+Z
暂停它。
这是一个有趣的小游戏,但是如果你想要做一个严肃的安全,我担心(:
答案 1 :(得分:0)
我的读取$ CODEAME设置也不是$ CODENAME导致问题。
这是固定的,工作完美。现在我将实现一个陷阱命令来阻止人们试图绕过脚本..
如果有人有任何资源或示例陷阱来停止CTRL C,CTRL Z和SIG术语,请告诉我们!