如果条件,请调试bash



我尝试运行作业时会遇到错误。

#!/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语句有什么问题?

尝试:

#!/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/031和http://mywiki.woolede.org/bashguide/testsandconditionals。除非您为Posix SH写信,否则我们建议[[

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

whitespace在这里计数:

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

和:

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

也更喜欢[[而不是[

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

方括号内以及!=操作员周围需要有空格。需要空格。如果用户名有空间或空白,请引用"$u"也是很好的做法。

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

您的脚本还有其他问题,我想应该留给您。

要调试bash脚本,您也可以使用bash -xset -x

bash -x script.sh运行一个带有调试消息的现有脚本,它将在执行之前回荡。

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

在交互式外壳中 set -x甚至几乎没有用。

在" bash for初学"指南中,在调试bash脚本下都很好地解释了这些。

相关内容

  • 没有找到相关文章

最新更新