':不是有效的标识符

时间:2015-04-11 10:12:26

标签: bash shell unix

我从之前删除了两个if语句,并用case语句替换它们,并尝试从代码中删除所有错误。 我试图运行此代码,但我在case语句中得到一个错误。 "':不是有效的标识符
main.sh:第5行:意外令牌$'in\r''
'ain.sh: line 5:
附近的语法错误" $ y"在"

    #!/bin/bash
echo "1. Julian"
echo "2. Gregorian"
read y
case "$y" in
1)echo "Enter your year (1900-2050)"
read x
if [[ $x -ge 1900 && $x -le 2050 ]]
 then
a=$((x%19)) 
b=$((x/100))
c=$((x%100))
d=$((b/4))
e=$((b%4))
g=$(((8*b+13)/25))
h=$(((19*a+b-d-g+15)%30))
m=$(((a+11*h)/319))
j=$((c/4))
k=$((c%4))
l=$(((2*e+2*j-k-h+m+32)%7))
n=$(((h-m+l+90)/25))
p=$(((h-m+l+n+19)%32)) 
o=$(date +"$x-$n-$p")

echo "Gregorian Easter is on $O."

else
 echo "Invalid Input" 
 fi
;;

2) echo "Enter your year (1900-2050)"
read x
if [[ $x -ge 1900 && $x -le 2050 ]]
 then
A=$((x%4)) 
B=$((x%7))
C=$((x%19))
D=$(((19*C+15)%30))
E=$(((2*A+4*B−D+34)%7))
M=$(((D+E+114)/31))
day=$(((D+E+115)%31))
o=$(date +"$x-$M-$day")

echo "Gregorian Easter is on $o."
else 
 echo "Invalid Input"
fi
;;
0) exit ;;
esac

4 个答案:

答案 0 :(得分:2)

#!/bin/sh替换为#!/bin/bash

elif[替换为elif [

fi行上方添加elif行。

then行下方添加elif行。

-gt替换为-ge

-lt替换为-le

完成此操作后,您的o变量可能仍然为空,但您可以通过添加echo +"$x-$n-$p"进行调试。

答案 1 :(得分:2)

解决标题y_pred

中的问题

': not a valid identifier传递一个以回车符号结尾的变量名时,会发生这种情况。

当打印该符号时,它会将光标发送回该行的开头。

因此,read尝试打印:

read foo<CR>

但是,由于foo<CR>': not a valid identifier 将光标发回,实际打印的内容是:

<CR>

要解决此问题,请在您的文件上运行': not a valid identifier ;在vim中运行dos2unix,或者将其转换为UNIX换行符而不是DOS换行符。

答案 2 :(得分:0)

但是,错误太多了。无论如何,我想你想要这样的东西:

#!/bin/bash
echo "1. Julian"
echo "2. Gregorian"
read y
case "$y" in
1)echo "Enter your year (1900-2050)"
read x
if [[ $x -ge 1900 && $x -le 2050 ]]; then
a=$((x%19)) 
b=$((x/100))
c=$((x%100))
d=$((b/4))
e=$((b%4))
g=$(((8*b+13)/25))
h=$(((19*a+b-d-g+15)%30))
m=$(((a+11*h)/319))
j=$((c/4))
k=$((c%4))
l=$(((2*e+2*j-k-h+m+32)%7))
n=$(((h-m+l+90)/25))
p=$(((h-m+l+n+19)%32)) 
o="$date $x-$n-$p"

echo "Julian Easter is on $o."

else
 echo "Invalid Input" 
 fi
;;

2) echo "Enter your year (1900-2050)"
read x
if [[ $x -ge 1900 && $x -le 2050 ]]; then
A=$((x%4)) 
B=$((x%7))
C=$((x%19))
D=$(((19*C+15)%30))
E=$(((2*A+4*B-D+34)%7))
M=$(((D+E+114)/31))
day=$(((D+E+115)%31))
o="$date $x-$M-$day"

echo "Gregorian Easter is on $o."
else 
 echo "Invalid Input"
fi
;;
0) exit
;;
esac

答案 3 :(得分:0)

这里一个输入- 我的一个脚本遇到了同样的问题。我发现自己犯了一个错误。 始终确保函数名称不应包含-,而应使用_。