Toon posts:

syntax error: unexpected end of file

Pagina: 1
Acties:

Verwijderd

Topicstarter
# begin script
adduser $1 -g $2

mkdir /data/personal/$1

if $2 = 'Jam' then
cp jamscript.bat /home/$1/profile/Start Menu/Programs/Startup
fi

if $2 = 'Rare' then
cp rarescript.bat /home/$1/profile/Start Menu/Programs/Startup
fi

if $2 = 'Finance' then
cp financescript.bat /home/$1/profile/Start Menu/Programs/Startup
fi

if $2 = 'Administrator' then
cp administratorscript.bat /home/$1/profile/Start Menu/Programs/Startup
fi

smbpasswd -a $1
# einde script

als ik het script run: ./add_user gebruiker groep: line 18: syntax error: unexpected end of file

huh??

Ik heb ook al geprobeerd om ; achter de laatste regel te zetten en fi maar toch blijf hij dezelfde foutmelding geven.
Er zijn meerdere mensen met dit probleem maar die hebben een ander soort script..

Wie kan mij helpen

[ Voor 5% gewijzigd door Verwijderd op 20-01-2005 16:35 ]


  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 13-02 15:40
Wat is regel; 18 in dit script?

Verwijderd

Topicstarter
De regel onder smbpasswd -a $1

Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash

if [ $# != 2 ]; then
        # Check het aantal parameters; is dit ongelijk aan 2
        # geef foutmelding en stop
        echo "Usage: `basename $0` <username> <group>"
        exit 1
fi

if [ x"`cat /etc/passwd | grep $1 | cut -d: -f1`" == "" ]; then
        #Als de user nog niet bestaat voeg je m toe
        adduser $1 -g $2
        [ ! -d /data/personal/$1] && mkdir /data/personal/$1
        DESTDIR="/home/$1/profile/Start Menu/Programs/Startup"
        [ ! -d $DESTDIR ] && mkdir $DESTDIR
        cp `echo $2 | tr A-Z a-z`script.bat $DESTDIR
        smbpasswd -a $1
else
       echo "gebruiker $1 bestaat al ..."
fi
exit 0


Doet hetzelfde als ik me niet vergis ... Does met sh -x scriptname.sh uitvoeren, en zie waar het op foutgaat.

edit:

Speciaal voor PowerSp00n, met een aantal checks ;)

[ Voor 62% gewijzigd door Verwijderd op 20-01-2005 17:13 ]


  • PowerSp00n
  • Registratie: Februari 2002
  • Laatst online: 17-11-2025

PowerSp00n

There is no spoon

Verwijderd schreef op donderdag 20 januari 2005 @ 16:53:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh

# begin script
adduser $1 -g $2

mkdir /data/personal/$1

DESTDIR="/home/$1/profile/Start Menu/Programs/Startup"

cp `echo $2 | tr A-Z a-z`script.bat $DESTDIR

smbpasswd -a $1
# einde script


Doet hetzelfde als ik me niet vergis ... Does met sh -x scriptname.sh uitvoeren, en zie waar het op foutgaat.
brr... Uitkijken met dit soort scripts, ik zou in ieder geval even checken of je de parameters e.d. wel opgeeft. Ik had ook eens zoiets wat even snel-snel-simpel in elkaar was gezet, en met een beetje haast was ik vergeten nog iets achter het script te zetten waarna het dus even wat permissions heeft lopen verzieken. Maargoed ik ben een verhaal appart :+...

Verwijderd

PowerSp00n schreef op donderdag 20 januari 2005 @ 17:03:
[...]
brr... Uitkijken met dit soort scripts, ik zou in ieder geval even checken of je de parameters e.d. wel opgeeft. Ik had ook eens zoiets wat even snel-snel-simpel in elkaar was gezet, en met een beetje haast was ik vergeten nog iets achter het script te zetten waarna het dus even wat permissions heeft lopen verzieken. Maargoed ik ben een verhaal appart :+...
Ja tuurlijk heb je gelijk. Ik zat er nog aan te denken om die post te editen en er een aantal checks aan toe te voegen, maar om de simplificatie van dat script duidelijk te houden heb ik deze maar niet toegevoegt. Laat ik staan als oefening voor de TS ;) check post hierboven, is toegevoegt ...

[ Voor 4% gewijzigd door Verwijderd op 20-01-2005 17:14 ]


Verwijderd

Topicstarter
Verwijderd schreef op donderdag 20 januari 2005 @ 16:53:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh

# begin script
adduser $1 -g $2

mkdir /data/personal/$1

DESTDIR="/home/$1/profile/Start Menu/Programs/Startup"

cp `echo $2 | tr A-Z a-z`script.bat $DESTDIR

smbpasswd -a $1
# einde script


Doet hetzelfde als ik me niet vergis ... Does met sh -x scriptname.sh uitvoeren, en zie waar het op foutgaat.
Doet dit script hetzelfde als mijn script? Dus dan hoef ik het eigenlijk niet te veranderen?
Even voor de duidelijkheid: Ik voeg een gebruiker toe met dit script adduser, en -g groep wordt de groep.
Aan de hand van de groep kopierd hij een batchbestand naar de startup van een gebruiker

  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 18:35
Hmm, Ik neem aan dat je samba gebruikt als PDC? Waarom geef je dan niet elke user zn eigen login script? :P

Verwijderd

Topicstarter
Ja dat moet in smb.conf en dan logon script of wat?
Maar ik moet het per groep een ander script hebben en dat gaat dan toch niet?
Toch alleen als je voor iedere gebruiker hetzelfde script moet hebben

Verwijderd

Een extra enter aan het einde (dus een extra lege regel onderaan) heeft mij weleens uit de brand geholpen. Een kleine moeite, dus probeer het even.

[ Voor 9% gewijzigd door Verwijderd op 20-01-2005 19:45 ]


Verwijderd

Topicstarter
Ik ben weer terug op m'n werk en ik heb die extra regel geprobeerd maar hij blijf dezelfde foutmelding geven!
Weet iemand nog iets?

  • richardt
  • Registratie: Mei 2002
  • Laatst online: 08-03-2025
Zo op het eerste gezicht zie ik een aantal punten (bij het begin-topic) waar het mis kan gaan.

1) als je je script start met ./add_user, dan is het beter om aan het begin van je shell-script een aanroep van de shell die je gebruikt (/bin/sh of /bin/bash)
2) de conditie in het if-statement moet je tussen [] -haken plaatsen
3) 'if' en 'then' zijn twee shell commando's. Als je ze op 1 regel wil plaatsen, moet je ze door een ';' scheiden
4) Het pad waar je naar toe kopieert bevat een spatie. Die moet je escapen door een '\' of het hele pad tussen aanhalings tekens zetten.
5) Het zou potentieel mis kunnen gaan als de argumenten $1 en $2 ook spaties bevatten...

Verwijderd

Verwijderd schreef op donderdag 20 januari 2005 @ 16:31:
if $2 = 'Jam' then
[..]
line 18: syntax error: unexpected end of file
Er mist een puntkomma: "if $2 = 'Jam'; then"...

[edit]
Nou we toch bezig zijn, bij deze wat programmeerlessen voor je:
• Aangezien het volgens de standaard niet uitgesloten is dat een script volledig geparset wordt voordat hij uitgevoerd wordt, en de $2 leeg kan zijn, kan dat een syntax error opleveren als dat wordt gelezen als: "if = 'Jam'; then ...", vandaar dat men over het algemeen een karakter ervoor zet om syntax errors hier te voorkomen. Gebruik ook aanhalingstekens bij de $2, omdat $2 ge-escapete spaties kan bevatten, welke dan als aparte strings worden geparset, wat wederom een syntax error oplevert: if x"$2" = x"Jam"; then ...
• Gebruik voor leesbaarheid altijd haakjes, indenting, bash test functies, en dergelijke:
code:
1
2
if [ test x"$2" = x"Jam" ]; then
  ..

• Test of argumenten bestaan. Als $2 leeg is in "rm -fr ./$2", kun je best wel lullige dingen doen. Komt de leesbaarheid ten goede en is ook handiger voor als je het script later gebruikt maar vergeten bent hoe het te gebruiken:
code:
1
2
3
4
if [ test x"$2" = x"" ]; then
  echo "Usage: $0 <arg1> <arg2>"
  exit 1
fi


Misschien heb je d'r iets aan. :P.

[ Voor 72% gewijzigd door Verwijderd op 24-01-2005 11:09 ]


  • richardt
  • Registratie: Mei 2002
  • Laatst online: 08-03-2025
code:
1
2
if [ test x"$2" = x"Jam" ]; then
  ..


Op veel systemen zijn [] en het 'test' commando synoniem voor elkaar, maw: je kunt er eentje weglaten. Ik vind het gebruik van 'test' nogal verwarrend, omdat het soms zo kan zijn dat men het script ook 'test' noemt waardoor, als $PATH niet goed staat, de werkelijke /usr/bin/test niet wordt uitgevoerd. Dat terzijde. verder goede uitleg...!

Verwijderd

Topicstarter
hehe ik heb het opgelost dat hele script deugde gewoon niet

adduser $1 -g $2 -G $3
mkdir /data/personal/test/

$case $2 in
Jam)
cp jamscript.bat "/home/$1/profile/Start Menu/Programs/Startup"
Rare
cp rarescript.bat "/home/$1/profile/Start Menu/Programs/Startup"

Administrators
cp administratorsscript.bat "/home/$1/profiel/StartMenu/Programs/Startup"
esac

case $3 in
Finance)
cp financescript.bat "/home/$1/profile/Start Menu/Programs/Startup"
esac
smbpasswd -a $1

Ik heb het nu zo gedaan en nu werkt bijna alles, alleen nu zit ik met het volgende probleem:
als ik bij $3 niets invul dan werkt het hele script niet.. kan ik het ook zo maken dat als ik er niks invul dat hij dan niet moeilijk doet? Want niet iedere gebruiker krijgt namelijk een secundaire groep.

En als ik per groep een logon script wil hoe stel ik dit dan in in de smb.conf
Ik ben er wel achter hoe je dit doet per gebruiker maar hoe doe ik het dan als iedere gebruiker van een groep een ander script moet?
Pagina: 1