1

当我尝试运行我的作业时出现错误。

#!/bin/bash
## Assignment 2

echo Please enter a User Name:
read u
if [ $u!="root"]; then
        echo Searching for Username!
        grep $u /etc/passwd|sed 's/$u/hidden/gi'
elif [ $u!="toor"]; then
        echo Root is NOT allowed.
else
        echo Toor is definetely NOT allowed.
fi

输出:

Please enter a User Name:
user1
./assign2.sh: line 6: [bthiessen: command not found
./assign2.sh: line 9: [bthiessen: command not found
Toor is definetely NOT allowed.

我的 if 语句有什么问题?

4

4 回答 4

4

试试看:

#!/bin/bash

echo Please enter a User Name:
read u
if [[ $u != "root" ]]; then
        echo Searching for Username!
        grep "$u" /etc/passwd | sed "s/$u/hidden/gi"
elif [[ $u != "toor" ]]; then
        echo Root is NOT allowed.
else
        echo Toor is definetely NOT allowed.
fi

发现问题

  • [ $u!="root"]周围需要空间!=
  • 如果你在sed中使用变量,你需要"引号,不简单'

注意

[[是一个与命令类似(但比[命令更强大)的 bash 关键字。请参阅http://mywiki.wooledge.org/BashFAQ/031http://mywiki.wooledge.org/BashGuide/TestsAndConditionals。除非您正在为 POSIX sh 编写代码,否则我们建议您[[

'了解and"和 `之间的区别。请参阅http://mywiki.wooledge.org/Quoteshttp://wiki.bash-hackers.org/syntax/words

于 2012-10-17T23:34:21.693 回答
2

空格在这里很重要:

if [[ $u!="root" ]]; then

和:

elif [[ $u!="toor" ]]; then

也比较喜欢[[[

于 2012-10-17T23:34:19.213 回答
1
if [ $u!="root"]; then
elif [ $u!="toor"]; then

方括号内和运算符周围需要有空格!=。空格是必需的。"$u"如果用户名有空格或为空白,引用也是一个好习惯。

if [ "$u" != "root" ]; then
elif [ "$u" != "toor" ]; then

你的脚本还有其他问题,我想应该留给你去寻找。

于 2012-10-17T23:39:54.043 回答
1

要调试 bash 脚本,您还可以使用bash -xand set -x

bash -x script.sh运行带有调试消息的现有脚本,它会在执行它们之前回显行。

您可以直接在set -x您的shell 脚本中启用此行为,例如在shebang 之后的第一行中。(这有点像echo on在 Windows 脚本中。)set +x禁用此选项。

set -x甚至可以在交互式 shell 中使用,尽管几乎没有用。

这一切都在 Bash Guide for Beginners 中的Debugging Bash scripts中得到了很好的解释。

于 2013-09-09T20:45:43.167 回答