我尝试运行作业时会遇到错误。
#!/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 -x
和set -x
:
bash -x script.sh
运行一个带有调试消息的现有脚本,它将在执行之前回荡。
使用set -x
,您可以直接在Shell脚本中启用此行为,例如在Shebang之后的第一行。(这有点像Windows脚本中的echo on
。)set +x
禁用此选项。
在交互式外壳中 set -x
甚至几乎没有用。
在" bash for初学"指南中,在调试bash脚本下都很好地解释了这些。