Нужна помощ в отладке 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
|