linux case 语句的错误,SH linux:语法错误:单词意外

没有检索到摘要

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我想知道我在这段代码中做错了什么:

#!/bin/sh

SERVICE_NAME=neocloud

PATH_TO_JAR=/etc/neocloud/cloud.jar

PID_PATH_NAME=/tmp/neocloud-pid

case $1 in

start)

echo "Starting $SERVICE_NAME ..."

if [ ! -f $PID_PATH_NAME ]; then

nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null &

echo $! > $PID_PATH_NAME

echo "$SERVICE_NAME started ..."

else

echo "$SERVICE_NAME is already running ..."

fi

;;

stop)

if [ -f $PID_PATH_NAME ]; then

PID=$(cat $PID_PATH_NAME);

echo "$SERVICE_NAME stoping ..."

kill $PID;

echo "$SERVICE_NAME stopped ..."

rm $PID_PATH_NAME

else

echo "$SERVICE_NAME is not running ..."

fi

;;

restart)

if [ -f $PID_PATH_NAME ]; then

PID=$(cat $PID_PATH_NAME);

echo "$SERVICE_NAME stopping ...";

kill $PID;

echo "$SERVICE_NAME stopped ...";

rm $PID_PATH_NAME

echo "$SERVICE_NAME starting ..."

nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null &

echo $! > $PID_PATH_NAME

echo "$SERVICE_NAME started ..."

else

echo "$SERVICE_NAME is not running ..."

fi

;;

esac

通过sh执行我收到以下错误信息:

Syntax error: word unexpected (expecting “in”)

但在案件命令中,我已经说完了.

任何人都知道如何解决这个错误?

非常感谢!

解决方法:

如此处所述,您的代码在语法上是有效的类似POSIX的shell代码,您可以在shellcheck.net验证(但是,由于不引用您的变量引用(例如,echo $PID_PATH_NAME),这将警告您可能不需要的副作用回声“$PID_PATH_NAME”),但不适用于案例陈述中的$1 [1]

).

类似地,复制你的问题中的代码并将其粘贴到一个新文件中并使用sh on Ubuntu(即Dash)来执行它,也可以正常工作.

因此 – 除非你的sh不是它应该是什么 – 我怀疑你的shell文件中有“奇怪的”字符,例如标准ASCII范围之外的Unicode空格,它可能看起来像普通的空格,但不是; Unicode不间断空格字符(U_00A0,UTF8编码为0xC2 0xA0)就是一个例子.

要查找此类字符,请运行以下命令(其中脚本代表您的脚本):

LC_ALL=C cat -e script

并寻找M-和^< letter>输出中的序列;例如,上述不间断空间显示为M-BM-.

[1]双重引用案例陈述的论据并没有伤害,但没有必要.

虽然不带引号的参数/变量引用在类似POSIX的shell中的大多数位置都是分词和路径名扩展的,但case是一个奇怪的例外.

下面演示了这一点,并适用于所有主要的POSIX类shell(dash,bash,ksh,zsh):

$sh -c 'case $1 in "foo *") echo "match";; *) echo "nomatch"; esac' - 'foo *'

match

文字参数foo *匹配case分支,即使$1是未引用的.

(与典型情况(例如,echo $1)形成对比,其中$1的值将受到分词和路径名扩展(globbing)的影响.)

标签:bash,linux,ubuntu,sh,ubuntu-14-04

来源: https://codeday.me/bug/20190824/1704246.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值