我想启动一组特定的服务(在下面的示例中,该服务称为用户),并且在我的脚本中,这是有效的。但是,我在运行命令时看到以下错误:
./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
的功能如下:
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
正如我所提到的,脚本正在按照我的意愿行事,但我不断收到语法表达式错误。
关于为什么会发生这种情况的任何想法?提前谢谢!
答案 0 :(得分:3)
$@
似乎包含您的服务名称,但在if
中您尝试计算它们。使用$#
代替$@
。
答案 1 :(得分:0)
尝试:
if [[ -z "$@" ]]
-z
:检查无零字符串;比计算那里有多少项更快