singlepost

Помощь в Языке Shell (OC UNIX) << На главную или назад  

Как мне записать вот это:arr[mas[j]]++ в синтаксисе языка Shell

112 ответов в теме “Помощь в Языке Shell (OC UNIX)”

  1. 19
    Александр Казанцев ответил:

    ubuntu linux, тут не версия играет значение, а то, в чем ты запускаешь… в линуксе куча оболочек bash, ksh, sh, dash… все не перечислю даже :)

  2. 18
    Александр Казанцев ответил:

    и я не думаю что синтаксис win-bash отличается от стандартного, скорее всего вы чем-то другим пытаетесь запускать скрипты :)

  3. 17
    Андрей Долинин ответил:

    Спасибо. А у тебя какая версия ОS в которой ты это писал?

  4. 16
    Александр Казанцев ответил:

    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 раз

    Работает с квадратными скобками. Надеюсь у тебя в циклах круглые скобки поддерживаются, если нет – замени на условия вида [[ ... ]] и не забывай про ковычки.

  5. 15
    Андрей Долинин ответил:

    Там немного синтаксис отличается от Shell-а, который встроен в Linux. Вот и не получается переделать.

  6. 14
    Александр Казанцев ответил:

    0_o какие извращения :)

  7. 13
    Андрей Савин ответил:

    А вся фигня в том, что он каким-то образом это дело в винде запускает :)
    так что это не поможет, мне кажется.

  8. 12
    Александр Казанцев ответил:

    А ты не забыл в первой строке указать какому интерпретатору пренадлежит скрипт?
    #!/bin/bash например

    или же запускай его командой bash, а не sh или ./

  9. 11
    Андрей Савин ответил:

    в каких строках ошибки… Странно что не работает. И не знал что shell скрипты требуют компиляции…

  10. 10
    Андрей Долинин ответил:

    например у меня записывается i=$[i+1] а на j=$((j+1)) ругается компилятор

  11. 9
    Андрей Долинин ответил:

    Я переделал ввод и вывод,но ф-я поиска не работает:
    #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

  12. 8
    Андрей Долинин ответил:

    Не работает, выдаёт ошибки при выводе. У нас разный компилятор

  13. 7
    Андрей Долинин ответил:

    Ага…разный компилятор у нас с тобой.

  14. 6
    Андрей Савин ответил:

    #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% рабочий вариант

  15. 5
    Андрей Савин ответил:

    ой что-то наворотил я… вместо

    if [ $j -eq $i ]
    then
    j=1
    else
    j=0
    fi

    можно написать просто j=0
    а проверка уже внутри цикла нормально осуществляется.
    Сильно не ругать, сам ещё только учусь :)

  16. 4
    Андрей Савин ответил:

    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

  17. 3
    Андрей Савин ответил:

    #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

  18. 2
    Андрей Долинин ответил:

    не получается. Вобщем задача такая:Ввести последовательность строк. Подсчитать количество совпадающих строк.

    #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

  19. 1
    Андрей Савин ответил:

    mas[0]=0
    mas[1]=1
    arr[0]=1
    arr[1]=2

    echo $((${arr[${mas[0]}]}+1))

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.