2016-12-05 40 views
-1

这里是我的代码:庆典,贝壳,意外的标记做

echo -n "Enter 3 parameters in format file-num1-num2: " 
str="" 
while read param 
do 
     echo $param >|temp 
     fname=$(cut -d"-" -f1 temp) 
     num1=$(cut -d"-" -f2 temp) 
     num2=$(cut -d"-" -f3 temp) 
     range=$num1"-"$num2 
     head -$num3 $fname >|temp 
     tail -$num1 temp >|temp 
     st=$fname"-"$(wc -c <temp) 
     str=$str" "$st"-"$range 
     echo $(wc -c <temp) >>temp2 
     echo -n "Enter 3 parameters in format file-num1-num2: " 
done 
sort temp2 >|temp 
c=$(wc -l temp) 
c2=0 
while [ $c2 -lt $c ] 
do 
((c2++)) 
head -$c2 temp >|temp3 
tail -1 temp3 >|temp3 
num=$(cat temp3) 
for x in $str 
do 
echo $x >| temp4 
fname=$(cut -d"-" -f1 temp4) 
ran=$(cut -d"-" -f2 temp4) 

sh=$(cut -d"-" -f3 temp4) 
if [ $ran -eq $num ] 
then 
echo "The size of file $fname in lines $sh is: $num" 
done 
done 
rm temp 
rm temp2 
rm temp3 
rm temp4 

确定这样的问题是,当我运行该脚本,我得到这个错误:

./P4.4: line 36: syntax error near unexpected token `done' 
./P4.4: line 36: `done' 

,当我运行它一些原因第一个循环卡住了,我需要按ctrl^d保持它去,并做了两次摆脱循环

这就是代码应该这样做:

输入:

g-5-7 
f-2-4 

输出:

The size of file f in lines 2-4 is: 16 
The size of file g in lines 5-7 is: 10 

文件G:

12 
34 
56 
78 
910 
ab 
wz 

文件f:

aa 
bb c 
dd ef 
gh x 
ttt 
+0

请阅读格式问题。这在很大程度上是不可读的。 – favoretti

+0

此外,请参阅http://shellcheck.net/进行一层自动化审查 - 至少在我们问这里之前,让我们修复它发现的错误。 –

+0

是的,请正确格式化。此外,你是否编号的代码行?如果是这样,请在格式化时删除不属于代码一部分的任何字符。 –

回答

0
if [ $ran -eq $num ] 
then 
echo "The size of file $fname in lines $sh is: $num" 
done 

if缺少一个fi

+0

......不是说这是唯一的错误,即使是在给出的小片段中也是如此。缺少引用意味着如果'$ ran'和'$ num'不会将字符串拆分为每个只包含一个单词,则该测试的行为完全不可预知。 (考虑'ran ='1 = 1 -o 1''的情况 - 只要'num'解析为单个数值,总是会成功,无论这个值是什么;这也会产生误导性的错误信息一个操作数是空的)。 –