Bash脚本返回语法错误:表达式中出现语法错误(错误标记为…)
我想启动一组特定的服务(在下面的示例中,该服务称为users),在我的脚本中,它正在工作。但是,我在运行命令时看到以下错误:Bash脚本返回语法错误:表达式中出现语法错误(错误标记为…),bash,syntax-error,Bash,Syntax Error,我想启动一组特定的服务(在下面的示例中,该服务称为users),在我的脚本中,它正在工作。但是,我在运行命令时看到以下错误: ./services.sh: line 40: [[: start users: syntax error in expression (error token is "users") 我使用脚本中的case语句调用此命令,该语句查找start参数: case "$1" in (-h) display_help e
./services.sh: line 40: [[: start users: syntax error in expression (error token is "users")
我使用脚本中的case
语句调用此命令,该语句查找start
参数:
case "$1" in
(-h)
display_help
exit 0
;;
(start)
start_services "$@"
;;
我的启动服务功能如下所示:
start_services()
{
# Check to see if there are any arguments, if not, start all services
if [[ $@ -eq 0 ]]; then
echo
echo "Starting all services:"
echo "======================"
for svc in $services
do
echo " Starting the $svc service... "
$SVCPATH/bin/$svc &
done
else
shift;
echo
for var in "$@"
do
echo "Starting the $var service... "
$SVCPATH/bin/$var & > /dev/null
done
fi
}
因此,故障发生在第40行:
if [[ $@ -eq 0 ]]; then
正如我提到的,脚本正在做我想做的事情,但是我一直得到语法表达式错误
你知道为什么会这样吗?提前谢谢
$@
似乎包含了您的服务名称,但在中,如果您尝试对它们进行计数。使用$#
而不是$@
$@
似乎包含您的服务名称,但在中,如果您尝试计数它们,则使用$
。使用$\code>而不是$@
试试:
if [[ -z "$@" ]]
-z
:检查无零字符串;比数一数有多少物品要快
尝试:
-z
:检查无零字符串;比数一数有多少物品要快
您的意思是$\code>而不是$@
?问题是用于检查参数的构造不正确,该参数必须是$
。您看到的错误是由于未加引号的$@
导致[
运算符的操作数不正确。始终对算术上下文使用$(..)
,即if(($)==2))
我在您的第一个代码块、键入或错误中没有看到结束符esac
)-祝您好运。您的意思是$#
而不是$@
?问题是用于检查参数的结构不正确,参数必须是$
。您看到的错误是因为未引用的$@
导致了错误的数字对[[
运算符的操作数。始终对算术上下文使用$(..)
,即如果($#==2))
我在第一个代码块中没有看到结束esac
,输入错误或错误?;-)祝您好运。