编写 Bash 脚本以在登录时出错时注销。需要指导
Writing Bash Script to Log Out if Incorrect upon Login. Need guidance
我正在尝试编写一个 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
*****更新*******
好的,我已经修复了那个部分。现在脚本具有以下内容。
回声"What is the codename?"
阅读代码
如果 [ $CODENAME = "Cole Server" ];
然后
当我 运行 脚本时,出现错误“./txtscript: line 14: [: =: unary operator expected]
第 14 行是:if [ $CODENAME = "Cole Server" ];
总的来说,我什至没有找到一个很好的 website/article 来真正解释一元运算符预期的错误,所以我不知道它是什么意思。非常感谢任何帮助。
嗯,问题是$codename
没填
所以第 13 行是 运行:
if [ = "Cole Server" ]; # note: the $codename was expanded to emptiness
你想在脚本中写的是:
if [ "$codename" = "Cole Server"];
这将评估为
if [ "" = "Cole Server"];
这至少在语法上是有效的。您仍然需要实际分配给 codename
某个地方,您目前没有这样做。
但是,我认为这整个方法可能是错误的。
您正在为他们提供交互式 bash 会话,他们可以在那里做各种事情 - 例如按 Ctrl+Z
暂停它。
作为一个有趣的小游戏,这很好,但如果你想做严肃的安全,我担心 (:
我也将读取的 $CODEAME 设置为不是 $CODENAME,这是导致问题的原因。
这是固定的并且工作完美。现在我将实施一个陷阱命令来阻止人们试图绕过脚本..
如果有人有任何资源或示例陷阱来阻止 CTRL C、CTRL Z 和 SIG 术语,请告诉我!
我正在尝试编写一个 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
*****更新*******
好的,我已经修复了那个部分。现在脚本具有以下内容。
回声"What is the codename?" 阅读代码 如果 [ $CODENAME = "Cole Server" ]; 然后
当我 运行 脚本时,出现错误“./txtscript: line 14: [: =: unary operator expected]
第 14 行是:if [ $CODENAME = "Cole Server" ];
总的来说,我什至没有找到一个很好的 website/article 来真正解释一元运算符预期的错误,所以我不知道它是什么意思。非常感谢任何帮助。
嗯,问题是$codename
没填
所以第 13 行是 运行:
if [ = "Cole Server" ]; # note: the $codename was expanded to emptiness
你想在脚本中写的是:
if [ "$codename" = "Cole Server"];
这将评估为
if [ "" = "Cole Server"];
这至少在语法上是有效的。您仍然需要实际分配给 codename
某个地方,您目前没有这样做。
但是,我认为这整个方法可能是错误的。
您正在为他们提供交互式 bash 会话,他们可以在那里做各种事情 - 例如按 Ctrl+Z
暂停它。
作为一个有趣的小游戏,这很好,但如果你想做严肃的安全,我担心 (:
我也将读取的 $CODEAME 设置为不是 $CODENAME,这是导致问题的原因。
这是固定的并且工作完美。现在我将实施一个陷阱命令来阻止人们试图绕过脚本..
如果有人有任何资源或示例陷阱来阻止 CTRL C、CTRL Z 和 SIG 术语,请告诉我!