在意外令牌附近获取语法错误`fi'执行下面的代码。 以下是输出: -
: command not founde 2:
: command not founde 7:
run_billing.sh: line 22: syntax error near unexpected token `fi'
'un_billing.sh: line 22: `fi
脚本是:
#!/bin/sh
#
# main
#
NARGS=$#
if [ $NARGS -lt 2 ]
then
echo "$PRG_NAME: error: incorrect number of arguments ($NARGS)";
echo "Usage: $PRG_NAME [Time]";
echo "Time format - pin_virtual_time format. e.g:- 062000002015.00";
echo "Example: sh run_billing.sh 062000002015.00";
exit 1
fi
if [ $NARGS -eq 2 ]
then
echo "Run Billing script - pin_bill_day";
pin_virtual_time -m2 $1;
pin_bill_day;
fi
答案 0 :(得分:1)
您的线路末端被拧紧,每条线路由CR / LF终止,而不仅仅是LF。
如果您执行od -c run_billing.sh
之类的操作,则根据我的测试脚本(\r
字符为CR),您会在其中看到^M
个字符:
if [[ 1 -eq 1 ]]^M
then^M
echo x is 1^M
fi^M
^M
0000000 i f [ [ 1 - e q 1 ] ]
0000020 \r \n t h e n \r \n \t e c h o x
0000040 i s 1 \r \n f i \r \n \r \n
0000054
并且,当该文件运行时,我们会看到类似的问题。
这就是为什么你得到奇怪的错误输出,因为CR在继续消息之前将光标移动到行的开头,覆盖它已经输出的一些内容。
例如,脚本的第2行和第7行(所谓的空白行)包含一个CR字符,该字符被解释为不存在的命令。因此,对于第2行,您会看到(叠加):
run_billing.sh: line 2:<CR>
: command not found
=========================== giving:
: command not founde 2:
正是你所看到的。
您需要修改文件以删除这些CR字符,this excellent answer中提供了几种方法。