i="0"; c1="0"
echo "Ввод строк (пустая для продолжения)"
while :; do
read str[$i]
if [ -z "${str[$i]}" ]; then break; fi
i=$[i+1]
done
while ((c1<i)); do
c2="0"; t[$c1]="0"
while ((c2<i)); do
if ((c1==c2))||((c1>c2)); then c2=$[c2+1]; continue; fi
if [ "${str[$c1]}" == "${str[$c2]}" ]; then
t[$c1]=$[t[c1]+1]; r[$c2]="1"
fi
c2=$[c2+1]
done
c1=$[c1+1]
done
while ((c1>0)); do
c1=$[c1-1]
if ((r[c1]==1)); then continue; fi
echo "Строка \"${str[$c1]}\" повторилась ${t[$c1]} $w"
done
exit 0
Строка lol повторилась 0 раз
Строка poka повторилась 1 раз
Строка privet повторилась 0 раз
Работает с квадратными скобками. Надеюсь у тебя в циклах круглые скобки поддерживаются, если нет – замени на условия вида [[ ... ]] и не забывай про ковычки.
Я переделал ввод и вывод,но ф-я поиска не работает:
#vvod strok
echo -n "vvedi kol-vo strok "
read amount
i=1
while [ $i -le $amount ]
do
echo -n "vvedi stroku $i "
read arr$[i]
i=$[i+1]
done
#vivod strok
i=1
while [ $i -le $amount ]
do
echo $[arr$[i]]
i=$[i+1]
done
#podschet sovpadenii
i=1
j=1
while [ $i -le $amount ]
do
mas$[i]=0
j=1
while [ $j -le $amount ]
do
if [ $[arr[$i]] = $[arr[$j]] ]
then
if [ $i -ne $j ]
then
mas$[i]=$[$[mas[$i]]+1]
fi
fi
j=$[j+1]
done
i=$[i+1]
mas$[i]=0
done
#result
i=1
while [ $i -le $amount ]
do
echo $[arr[$i]] "povtor" $[mas[$i]] "raz"
i=$[i+1]
done
read z
#podschet sovpadenii
i=0
j=0
while [ $i -lt $amount ]
do
mas[$i]=0
j=0
while [ $j -lt $amount ]
do
if [ ${arr[$i]} = ${arr[$j]} ]
then
if [ $i -ne $j ]
then
mas[$i]=$((${mas[$i]}+1))
fi
fi
j=$((j+1))
done
i=$((i+1))
mas[$i]=0
done
#vivod strok
i=0
while [ $i -lt $amount ]
do
echo ${arr[$i]}
i=$((i+1))
done
#podschet sovpadenii
i=0
j=0
while [ $i -lt $amount ]
do
mas[$i]=0
if [ $j -eq $i ]
then
j=1
else
j=0
fi
while [ $j -lt $amount ]
do
if [ ${arr[$i]} = ${arr[$j]} ]
then
if [ $i -ne $j ]
then
mas[$i]=$((${mas[$i]}+1))
else
j=$((j+1))
fi
fi
j=$((j+1))
done
i=$((i+1))
mas[$i]=0
done
#result
i=0
while [ $i -lt $amount ]
do
echo ${arr[$i]} "povtor" ${mas[$i]} "raz"
i=$((i+1))
done
не получается. Вобщем задача такая:Ввести последовательность строк. Подсчитать количество совпадающих строк.
#Entering stroki
echo -n "enter number of strings : "
read amount
i=1;
while [ $i -le $amount ]
do
echo -n "Enter arr($[i]): "
read arr$[i]
i=$[i+1]
done
i=1
while [ $i -le $amount ]
do
echo -n "Enter string $i: "
read mas$[i]
i=$[i+1]
done
#print stroki
i=1
while [ $i -le $amount ]
do
echo$[mas$[i]]
i=$[i+1]
done
#obrabotka strok
i=1
while [ $i -le $amount ]
do
$[arr$[mas$[i]]]=$[ $[arr$[mas$[i]]]+1]
i=$[i+1]
done
#print rezults
i=1
while [ $i -le $amount ]
do
if [ $[arr$[i]] ]
then
echo "stroka $i povtoryaetsya $[arr$[i]] raz"
fi
i=$[i+1]
done
read end#delay before exit
3 апреля 2009 в 11:00
ubuntu linux, тут не версия играет значение, а то, в чем ты запускаешь… в линуксе куча оболочек bash, ksh, sh, dash… все не перечислю даже
3 апреля 2009 в 11:00
и я не думаю что синтаксис win-bash отличается от стандартного, скорее всего вы чем-то другим пытаетесь запускать скрипты
3 апреля 2009 в 10:05
Спасибо. А у тебя какая версия ОS в которой ты это писал?
3 апреля 2009 в 8:03
i="0"; c1="0"
echo "Ввод строк (пустая для продолжения)"
while :; do
read str[$i]
if [ -z "${str[$i]}" ]; then break; fi
i=$[i+1]
done
while ((c1<i)); do
c2="0"; t[$c1]="0"
while ((c2<i)); do
if ((c1==c2))||((c1>c2)); then c2=$[c2+1]; continue; fi
if [ "${str[$c1]}" == "${str[$c2]}" ]; then
t[$c1]=$[t[c1]+1]; r[$c2]="1"
fi
c2=$[c2+1]
done
c1=$[c1+1]
done
while ((c1>0)); do
c1=$[c1-1]
if ((r[c1]==1)); then continue; fi
echo "Строка \"${str[$c1]}\" повторилась ${t[$c1]} $w"
done
exit 0
____________________________________________________
$ bash test.sh
Ввод строк (пустая для продолжения)
privet
poka
lol
poka
Строка lol повторилась 0 раз
Строка poka повторилась 1 раз
Строка privet повторилась 0 раз
Работает с квадратными скобками. Надеюсь у тебя в циклах круглые скобки поддерживаются, если нет – замени на условия вида [[ ... ]] и не забывай про ковычки.
2 апреля 2009 в 18:05
Там немного синтаксис отличается от Shell-а, который встроен в Linux. Вот и не получается переделать.
2 апреля 2009 в 15:01
0_o какие извращения
2 апреля 2009 в 14:02
А вся фигня в том, что он каким-то образом это дело в винде запускает
так что это не поможет, мне кажется.
2 апреля 2009 в 14:01
А ты не забыл в первой строке указать какому интерпретатору пренадлежит скрипт?
#!/bin/bash например
или же запускай его командой bash, а не sh или ./
1 апреля 2009 в 21:01
в каких строках ошибки… Странно что не работает. И не знал что shell скрипты требуют компиляции…
1 апреля 2009 в 21:01
например у меня записывается i=$[i+1] а на j=$((j+1)) ругается компилятор
1 апреля 2009 в 21:01
Я переделал ввод и вывод,но ф-я поиска не работает:
#vvod strok
echo -n "vvedi kol-vo strok "
read amount
i=1
while [ $i -le $amount ]
do
echo -n "vvedi stroku $i "
read arr$[i]
i=$[i+1]
done
#vivod strok
i=1
while [ $i -le $amount ]
do
echo $[arr$[i]]
i=$[i+1]
done
#podschet sovpadenii
i=1
j=1
while [ $i -le $amount ]
do
mas$[i]=0
j=1
while [ $j -le $amount ]
do
if [ $[arr[$i]] = $[arr[$j]] ]
then
if [ $i -ne $j ]
then
mas$[i]=$[$[mas[$i]]+1]
fi
fi
j=$[j+1]
done
i=$[i+1]
mas$[i]=0
done
#result
i=1
while [ $i -le $amount ]
do
echo $[arr[$i]] "povtor" $[mas[$i]] "raz"
i=$[i+1]
done
read z
1 апреля 2009 в 21:00
Не работает, выдаёт ошибки при выводе. У нас разный компилятор
1 апреля 2009 в 21:00
Ага…разный компилятор у нас с тобой.
1 апреля 2009 в 20:04
#podschet sovpadenii
i=0
j=0
while [ $i -lt $amount ]
do
mas[$i]=0
j=0
while [ $j -lt $amount ]
do
if [ ${arr[$i]} = ${arr[$j]} ]
then
if [ $i -ne $j ]
then
mas[$i]=$((${mas[$i]}+1))
fi
fi
j=$((j+1))
done
i=$((i+1))
mas[$i]=0
done
вот 100% рабочий вариант
1 апреля 2009 в 19:05
ой что-то наворотил я… вместо
if [ $j -eq $i ]
then
j=1
else
j=0
fi
можно написать просто j=0
а проверка уже внутри цикла нормально осуществляется.
Сильно не ругать, сам ещё только учусь
1 апреля 2009 в 19:04
vvedi kol-vo strok 4
vvedi stroku 1 qwe
vvedi stroku 2 asd
vvedi stroku 3 qwe
vvedi stroku 4 zxc
qwe
asd
qwe
zxc
qwe povtor 1 raz
asd povtor 0 raz
qwe povtor 1 raz
zxc povtor 0 raz
1 апреля 2009 в 19:03
#vvod strok
echo -n "vvedi kol-vo strok "
read amount
i=0
while [ $i -lt $amount ]
do
echo -n "vvedi stroku $((i+1)) "
read arr[$i]
i=$((i+1))
done
#vivod strok
i=0
while [ $i -lt $amount ]
do
echo ${arr[$i]}
i=$((i+1))
done
#podschet sovpadenii
i=0
j=0
while [ $i -lt $amount ]
do
mas[$i]=0
if [ $j -eq $i ]
then
j=1
else
j=0
fi
while [ $j -lt $amount ]
do
if [ ${arr[$i]} = ${arr[$j]} ]
then
if [ $i -ne $j ]
then
mas[$i]=$((${mas[$i]}+1))
else
j=$((j+1))
fi
fi
j=$((j+1))
done
i=$((i+1))
mas[$i]=0
done
#result
i=0
while [ $i -lt $amount ]
do
echo ${arr[$i]} "povtor" ${mas[$i]} "raz"
i=$((i+1))
done
1 апреля 2009 в 18:02
не получается. Вобщем задача такая:Ввести последовательность строк. Подсчитать количество совпадающих строк.
#Entering stroki
echo -n "enter number of strings : "
read amount
i=1;
while [ $i -le $amount ]
do
echo -n "Enter arr($[i]): "
read arr$[i]
i=$[i+1]
done
i=1
while [ $i -le $amount ]
do
echo -n "Enter string $i: "
read mas$[i]
i=$[i+1]
done
#print stroki
i=1
while [ $i -le $amount ]
do
echo$[mas$[i]]
i=$[i+1]
done
#obrabotka strok
i=1
while [ $i -le $amount ]
do
$[arr$[mas$[i]]]=$[ $[arr$[mas$[i]]]+1]
i=$[i+1]
done
#print rezults
i=1
while [ $i -le $amount ]
do
if [ $[arr$[i]] ]
then
echo "stroka $i povtoryaetsya $[arr$[i]] raz"
fi
i=$[i+1]
done
read end#delay before exit
1 апреля 2009 в 18:01
mas[0]=0
mas[1]=1
arr[0]=1
arr[1]=2
echo $((${arr[${mas[0]}]}+1))