我从之前删除了两个if语句,并用case语句替换它们,并尝试从代码中删除所有错误。
我试图运行此代码,但我在case语句中得到一个错误。
"':不是有效的标识符
main.sh:第5行:意外令牌$'in\r''
附近的语法错误" $ y"在"
'ain.sh: line 5:
#!/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
答案 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)
这里一个输入- 我的一个脚本遇到了同样的问题。我发现自己犯了一个错误。 始终确保函数名称不应包含-,而应使用_。