用户输入必须计算单词数的句子。如果数字大于3,则应将句子视为 Long 。如果是三个或更少,那么短。
我知道怎么做,但剩下的任务说制作一个循环,这样用户就可以输入句子,直到他输入" n"。问题是当我输入" n"这是重要的,但那" n"不应该被计算在内。 (它应该是一个break
语句。)如何在计算字母之前打破这个循环" n"?
#!/bin/bash
recenica=0
while [ $recenica != "n" ]
do
echo Unesite recenicu:
read recenica
if [ $recenica = "n" ]; then # ->>>>> this doesn't work
break
fi
echo $recenica > datoteka
br=$(wc -l datoteka | cut -c1-2)
echo recenica ima $br rijeci
if [ $br -gt 3 ]
then
echo $recenica > Duge.Recenice.IB
elif [ $br -le 3 ]
then
echo $recenica > Kratke.Recenice.IB
else
echo Molimo unijeti nešto
fi
done
答案 0 :(得分:0)
你需要在扩展到多个单词(包含空格)的符号周围使用引号......这有效:
#!/bin/bash
recenica=0
while [ "$recenica" != "n" ] # koristiti dvostruke navodnike ovdje
do
echo Unesite recenicu:
read recenica
if [ "$recenica" = "n" ]; then # koristiti dvostruke navodnike ovdje
break
fi
echo $recenica > datoteka
br=$(wc -l datoteka | cut -c1-2)
echo recenica ima $br rijeci
if [ $br -gt 3 ]
then
echo $recenica > Duge.Recenice.IB
elif [ $br -le 3 ]
then
echo $recenica > Kratke.Recenice.IB
else
echo Molimo unijeti nešto
fi
done
答案 1 :(得分:0)
read
的问题在于它会读取整行并将内容放在recenica
中。用一个词来说这对测试来说很好:
while [ $recenica != "n" ]
但是,如果您已阅读多个单词,那么由于[: too many arguments
(由amdn在其引用的答案中指出),测试将失败
当您输入n
时,您只关心第一个字,因此请使用parameter expansion/substring extraction
相应地限制您的测试:
while [ ${recenica%% *} != "n" ]; do
这允许您让while
循环控制break
逻辑,将代码的整个结构减少为:
#!/bin/bash
recenica=0
while [ ${recenica%% *} != "n" ]
do
echo Unesite recenicu:
read recenica
echo $recenica > datoteka
br=$(wc -l datoteka | cut -c1-2)
echo recenica ima $br rijeci
if [ $br -gt 3 ]
then
echo $recenica > Duge.Recenice.IB
elif [ $br -le 3 ]
then
echo $recenica > Kratke.Recenice.IB
else
echo Molimo unijeti nešto
fi
done
有很多方法可以做到这一点,但这种方法很好。