【发布时间】:2019-03-18 14:29:20
【问题描述】:
我已经删除了之前的两个 if 语句,并用一个 case 语句替换了它们,并试图从代码中删除所有错误。
我正在尝试运行此代码,但在 case 语句中出现错误。
"': 不是一个有效的标识符
main.sh:第 5 行:意外标记附近的语法错误 $'in\r''case "$y" in "
'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
【问题讨论】:
-
您的代码错误太多,请先尝试平衡 if 语句。你不能用一个 fi 来平衡 3 ifs
-
这是学习shell的一种方式吗?在 shell 中不是一个有用的演示。如果您正在做算术,请将这个计算密集型问题带到 awk 中。避免 shell 对算术施加的句法噪音。 (除非操作文件名)。