写入Bash脚本以在登录时注销不正确。需要指导

时间:2015-11-13 22:50:34

标签: linux bash login logout

我正在尝试编写一个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" ];

总的来说,我甚至没有找到一个好的网站/文章,真正解释了一元运营商的预期错误,所以我不知道这意味着什么。非常感谢任何帮助。

2 个答案:

答案 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术语,请告诉我们!