The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Нужна помощ в отладке bash-скрипта, !*! Kagato, 02-Июн-09, 12:43  [смотреть все]
Нужна помощ в отладке bash-скрипта для автоматического добавления/удаления пользователей.
Всю инфу скрипт берёт из файла с разделителем "|".
При запуске скрипт выдаёт ошибки:
line 63: неожиданный EOF при поиске соответствующего `"'
line 71: ошибка синтаксиса: неожиданный конец файла

Может кто сталкивался с подобным и знает в чём моя ошибка, кроме днк?

Собственно скрипт:
     1  #!/bin/bash
     2  #
     3  #
     4  ########environment declaration
     5  ufile=/tmp/incom
     6  td="" #add or del
     7  field= #первое поле
     8  ulogin= #user login
     9  upass="" #user pass
    10  ugroups="" #user groups
    11  strnum=1 #nomer stroki poiska
    12  str="" #string
    13  str1="add" #string1
    14  str2="del" #string2
    15  dels="" #number of first string of del section
    16  filend="" #number of last string
    17  uopt="" #option of del sect. that define delete homedir of usr or not
    18  n=1 # Счётчик
    19  #end of declaration
    20  #
    21  #Проверка наличия файла
    22  if  [ -e $ufile ]
    23          then
    24          dels=`cat /tmp/incom -n|grep "#delete" -i|awk '{print $1}'`
    25          filend=`cat /tmp/incom -n|grep end -i|awk '{print $1}'`
    26          else
    27          echo "File not faund"
    28          exit 0
    29  fi
    30  #
    31  echo $dels
    32  echo $filend
    33  echo $strnum
    34  #
    35  for field in $(awk 'BEGIN{FS="|"}{print $1}' < "$ufile" )
    36  do
    37          td=`sed -n '$n p' $ufile| grep add |awk 'BEGIN {FS = "|"};{print $1}'`
    38          #Проверка на добавление
    39          if [ "$td -eq "$str1" ]
    40          then
    41                  # polu4aem dannie uchetki
    42                  ulogin=`sed -n '$n p' $ufile| grep add |awk 'BEGIN {FS = "|"};{print $2}'`
    43                  ugroups=`sed -n '$n p' $ufile| grep add |awk 'BEGIN {FS = "|"};{print $3}'`
    44                  upass=`sed -n '$n p' $ufile| grep add |awk 'BEGIN {FS = "|"};{print $4}'`
    45                  #тест
    46                  echo "добавлен пользователь login= $ulogin, group= $ugroups, pass= $upass"
    47                  #тест
    48                  useradd "$ulogin" -G "$ugroups" -m -p "$upass" #dobavlaem usera s sozdaniem homedir #Добавляем юзера
    49                  echo "useradd "$ulogin" -G "$ugroups" -m -p "$upass""
    50          fi
    51  #
    52          if [ $td -eq "$str2" ] #proverka na udalenie
    53          then
    54                  ulogin=`sed -n '$n p' $ufile| grep add |awk 'BEGIN {FS = "|"};{print $2}'`
    55                  uopt=`sed -n '$n p' $ufile| grep add |awk 'BEGIN {FS = "|"};{print $3}'`
    56                  userdel --$uopt $ulogin
    57                  echo "userdel --$uopt $ulogin"
    58                  #тест
    59                  echo "удалён пользователь login= $ulogin, op= $uoupt"
    60                  #тест
    61          fi
    62  #
    63          if ["$n" -eq "$str2"]
    64          then
    65                  exit 0
    66          else
    67                  let n=n+1
    68          fi
    69  done
    70  exit 0


Файл который он разгребает:
     1  #ADD
     2  ##ToDo | login           | groups |pass
     3  #---------------------------------------------------------------------------------
     4  add|testovich|users,dialout,dip,video,lpadmin |lolodin
     5  add|testova|users,dialout,dip,video,lpadmin |lolodin
     6
     7  #DELETE
     8  ##TODO | Login |remove homdir or not
     9  #---------------------------------------------------------------------------------
    10
    11
    12  #TEST
    13
    14  #End.

система:
uname -a:
Linux test-laptop 2.6.28-11-generic #42-Ubuntu SMP Fri Apr 17 01:57:59 UTC 2009 i686 GNU/Linux

  • Нужна помощ в отладке bash-скрипта, !*! Andrey Mitrofanov, 13:20 , 02-Июн-09 (1)
    >line 63: неожиданный EOF при поиске соответствующего `"'
    >line 71: ошибка синтаксиса: неожиданный конец файла
    >
    >  if ["$n" -eq "$str2"]

    Отделить [ и ] пробелами?...

    >    70  exit 0

    • Нужна помощ в отладке bash-скрипта, !*! Kagato, 14:34 , 02-Июн-09 (2)
      >>line 63: неожиданный EOF при поиске соответствующего `"'
      >>line 71: ошибка синтаксиса: неожиданный конец файла
      >>
      >>  if ["$n" -eq "$str2"]
      >
      >Отделить [ и ] пробелами?...
      >
      >>    70  exit 0

      исправил, ошибки остались :(

      • Нужна помощ в отладке bash-скрипта, !*! Arpo, 16:14 , 02-Июн-09 (3)
        >>>line 63: неожиданный EOF при поиске соответствующего `"'
        >>>line 71: ошибка синтаксиса: неожиданный конец файла
        >>>
        >>>  if ["$n" -eq "$str2"]
        >>
        >>Отделить [ и ] пробелами?...
        >>
        >>>    70  exit 0
        >
        >исправил, ошибки остались :(

        Не знаю, но мне эта сточка не нравится, смотрю с телефона поетому проверить нет варианта.
        Думаю:
        let n=n+1 ->  let n=$n+1
        Или может
        let n++

        Доеду домой проверю...

        • Нужна помощ в отладке bash-скрипта, !*! Arpo, 16:20 , 02-Июн-09 (4)

          Да и тут нет ковычки после  "$td
          if [ "$td -eq "$str1" ] > if [ "$td" -eq "$str1" ]

          • Нужна помощ в отладке bash-скрипта, !*! Kagato, 16:45 , 02-Июн-09 (5)
            >
            >Да и тут нет ковычки после  "$td
            >if [ "$td -eq "$str1" ] > if [ "$td" -eq "$str1" ]

            Пасиб, это я уже поправил, сейчас это всё выглядит так, отрабатывает без ошибок, но вывод тестовых значений пустой:
                 1  #!/bin/bash
                 2  #
                 3  #
                 4  ########environment declaration
                 5  ufile=/tmp/incom
                 6  td="" #add or del
                 7  field= #первое поле
                 8  ulogin= #user login
                 9  upass="" #user pass
                10  ugroups="" #user groups
                11  strnum=1 #nomer stroki poiska
                12  str="" #string
                13  str1="add" #string1
                14  str2="del" #string2
                15  dels="" #number of first string of del section
                16  filend="" #number of last string
                17  uopt="" #option of del sect. that define delete homedir of usr or not
                18  n=1 # Счётчик
                19  field=1
                20  #end of declaration
                21  #
                22  #Проверка наличия файла
                23  if  [ -e $ufile ]
                24          then
                25          dels=`cat /tmp/incom -n|grep "#delete" -i|awk '{print $1}'`
                26          filend=`cat /tmp/incom -n|grep end -i|awk '{print $1}'`
                27          else
                28          echo "File not faund"
                29          exit 0
                30  fi
                31  #
                32  echo $dels
                33  echo $filend
                34  echo $strnum
                35  #for field in $(awk 'BEGIN{FS="|"}{print $1}' < "$ufile" )
                36
                37
                38
                39  for ((n=1; n <= filend; n++))
                40  do
                41  #echo "qwerty"
                42          td=`sed -n '/^$n/ p' $ufile| grep add |awk 'BEGIN {FS = "|"};{print $1}'`
                43          #Проверка на добавление
                44          echo $td
                45          if [ "$td" == "$str1" ]
                46          then
                47                  # polu4aem dannie uchetki
                48                  ulogin=`sed -n '/^$n/p' $ufile| grep add |awk 'BEGIN {FS = "|"};{print $2}'`
                49                  ugroups=`sed -n '/^$n/p' $ufile| grep add |awk 'BEGIN {FS = "|"};{print $3}'`
                50                  upass=`sed -n '/^$n/p' $ufile| grep add |awk 'BEGIN {FS = "|"};{print $4}'`
                51                  #тест
                52                  echo "добавлен пользователь login= $ulogin, group= $ugroups, pass= $upass"
                53                  #тест
                54                  useradd "$ulogin" -G "$ugroups" -m -p "$upass" #dobavlaem usera s sozdaniem homedir #Добавляем юзера
                55                  echo "useradd "$ulogin" -G "$ugroups" -m -p "$upass""
                56          fi
                57  #
                58          if [ "$td" == "$str2" ] #proverka na udalenie
                59          then
                60                  ulogin=`sed -n '/^$n/p' $ufile| grep add |awk 'BEGIN {FS = "|"};{print $2}'`
                61                  uopt=`sed -n '/^$n/p' $ufile| grep add |awk 'BEGIN {FS = "|"};{print $3}'`
                62                  userdel --$uopt $ulogin
                63                  echo "userdel --$uopt $ulogin"
                64                  #тест
                65                  echo "удалён пользователь login= $ulogin, op= $uoupt"
                66                  #тест
                67          fi
                68  done
                69  exit

          • Нужна помощ в отладке bash-скрипта, !*! Kagato, 12:38 , 03-Июн-09 (6)
            Всё, доделал. Спасибо всем кто указал мне на ошибки :)

            Для истории. Не удалось победить проблему с sed | awk, пришлось заменить на буферный файл.
            Найден вариант использования С-подобного синтаксиса в for, который существенно доставляет =)
            Окончательный вид скрипта:
            #!/bin/bash
            #
            #
            ########environment declaration
            ufile=/tmp/incom
            td="" #add or del
            field= #первое поле
            ulogin= #user login
            upass="" #user pass
            ugroups="" #user groups
            strnum=1 #nomer stroki poiska
            str="" #string
            str1="add" #string1
            str2="del" #string2
            dels="" #number of first string of del section
            filend="" #number of last string
            uopt="" #option of del sect. that define delete homedir of usr or not
            n=1 # Счётчик
            field=1
            #end of declaration
            #
            #Проверка наличия файла
            if  [ -e $ufile ]
                    then
                    dels=`cat /tmp/incom -n|grep "#delete" -i|awk '{print $1}'`
                    filend=`cat /tmp/incom -n|grep end -i|awk '{print $1}'`
                    else
                    echo "File not faund"
                    exit 0
            fi

            for ((n=1; n <= filend; n++))
            do
            #echo "qwerty"
                    sed -n "$n"p "$ufile" | awk "BEGIN {FS = \"|\"};{print \$1}" > /tmp/vrmtmp
                    td=`cat /tmp/vrmtmp`
                    #Проверка на добавление
                    if [ "$td" == "$str1" ]
                    then
                            # polu4aem dannie uchetki
            ##############################################################################################
                            sed -n "$n"p "$ufile" | awk "BEGIN {FS = \"|\"};{print \$2}" > /tmp/vrmtmp
                            ulogin=`cat /tmp/vrmtmp`
            ##############################################################################################
                            sed -n "$n"p "$ufile" | awk "BEGIN {FS = \"|\"};{print \$3}" > /tmp/vrmtmp
                            ugroups=`cat /tmp/vrmtmp`
            ##############################################################################################
                            sed -n "$n"p "$ufile" | awk "BEGIN {FS = \"|\"};{print \$4}" > /tmp/vrmtmp
                            upass=`cat /tmp/vrmtmp`
            ##############################################################################################
                                            #тест
                            useradd "$ulogin" -G "$ugroups" -m -p "$upass" #dobavlaem usera s sozdaniem homedir #Добавляем юзера
                    fi
            #
                    if [ "$td" == "$str2" ] #proverka na udalenie

                    then
            ##############################################################################################
                            sed -n "$n"p "$ufile" | awk "BEGIN {FS = \"|\"};{print \$2}" > /tmp/vrmtmp
                            ulogin=`cat /tmp/vrmtmp`
            ##############################################################################################
                            sed -n "$n"p "$ufile" | awk "BEGIN {FS = \"|\"};{print \$3}" > /tmp/vrmtmp
                            uopt=`cat /tmp/vrmtmp`
            ##############################################################################################
                            userdel --$uopt $ulogin
                    fi
            done
            rm -f /tmp/vrmtmp
            exit




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру