每当我运行bash脚本时,我都会遇到这个问题:
LRU.sh: line 121: syntax error near unexpected token `fi'
脚本是:
#!/bin/bash
declare -i numOfPageRRef=0
declare -i numOfFrames=$1
declare -i a=0
declare -i k=0
declare -i c=0
declare -i q
declare -i c1=0
OIFS=$IFS
IFS=','
read line < Input2.csv
for val in $line
do
pageRef[$numOfPageRRef]=$val
((numOfPageRRef++))
done
#echo ${pageRef[@]}
q[$k]=${pageRef[$k]} #chck here
echo ${q[$k]}
((c++))
((k++))
for((i=1;i<numOfPageRRef;i++))
do
c1=0
for((j=0;j<numOfFrames;j++))
do
if (( ${pageRef[$i]} -ne ${q[$j]} ))
then
((c1++))
fi
done
if (( c1 -eq numOfFrames ))
then
((c++))
if (( k -lt numOfFrames )) ;then
q[$k]=${pageRef[$i]}
((k++))
for((j=0;j<numOfFrames;j++))
do
echo ${q[$j]}
done
else
for((r=0;r<numOfFrames;r++))
do
c2[r]=0
for((j=i-1;j<numOfPageRRef;j--))
do
if (( ${q[$r]} -ne ${p[$j]} ))
then
((c2[r]++))
else break
fi
done
done
for((r=0;r<numOfFrames;r++))
do
t4=${c2[r]}
b[$r]=$t4
for((r=0;r<numOfFrames;r++))
do
for((j=r;j<numOfFrames;j++))
do
if (( ${b[$r} -lt ${b[$j]} ))
then
t=${b[r]}
t2=${b[j]}
b[$r]=$t2
b[$j]=$t
fi
done
done
for((r=0;r<numOfFrames;r++))
do
if (( ${c2[$r]} -eq ${b[0]} ))
then
t3=${p[$i]}
q[$r]=$t3
fi
echo ${q[$r]}
done
#echo
fi
fi
done
echo "The no of page fault is $c"
答案 0 :(得分:1)
您的错误是因为您错过了完成结束语句,当我重新编写代码中的所有语法时,我能够看到它,它在底部。所以这里是没有错误的代码。
<强> P.S 强>
将来请注意语法,在阅读代码时会有很大的不同。
OIFS=$IFS
IFS=','
read line < Input2.csv
for val in $line
do
pageRef[$numOfPageRRef]=$val
((numOfPageRRef++))
done
#echo ${pageRef[@]}
q[$k]=${pageRef[$k]} #check here
echo ${q[$k]}
((c++))
((k++))
for((i=1;i<numOfPageRRef;i++))
do
c1=0
for((j=0;j<numOfFrames;j++))
do
if (( ${pageRef[$i]} -ne ${q[$j]} ))
then
((c1++))
fi
done
if (( c1 -eq numOfFrames ))
then
((c++))
if (( k -lt numOfFrames ))
then
q[$k]=${pageRef[$i]}
((k++))
for((j=0;j<numOfFrames;j++))
do
echo ${q[$j]}
done
else
for((r=0;r<numOfFrames;r++))
do
c2[r]=0
for((j=i-1;j<numOfPageRRef;j--))
do
if (( ${q[$r]} -ne ${p[$j]} ))
then
((c2[r]++))
else break
fi
done
done
for((r=0;r<numOfFrames;r++))
do
t4=${c2[r]}
b[$r]=$t4
for((r=0;r<numOfFrames;r++))
do
for((j=r;j<numOfFrames;j++))
do
if (( ${b[$r]} -ne ${b[$j]} ))
then
t=${b[r]}
t2=${b[j]}
b[$r]=$t2
b[$j]=$t
fi
done
done
for((r=0;r<numOfFrames;r++))
do
if (( ${c2[$r]} -eq ${b[0]} ))
then
t3=${p[$i]}
q[$r]=$t3
fi
echo ${q[$r]}
done
done #Here You forgot the done!!!!!
fi
fi
done
echo "The no of page fault is $c"