Ik heb (beetje quick 'n' dirty) het volgende scriptje in elkaar gedraaid om op een basisschool leerlingen in de SAMBA-LDAP database te zetten, door de namen van de leerlingen onder elkaar in een tekstbestandje te zetten.
Het hele principe werkt, op één ding na: ook de volledige naam van de leerling moet in de datbase komen (gecos noemt smbldap-useradd het) zodat die in Menu Start kan verschijnen en later nog voor andere doeleinden gebruikt kan worden. Het punt is dat mijn variabele die de/het(?) gecos doorgeeft niet goed wordt geïnterpreteerd door smbldap-useradd. De naam bevat namelijk spaties en ik denk dat hij daardoor over z'n nek gaat. (Als ik de naam hard in het bestand zet met aanhalingstekens eromheen gaat het wél goed). Ik heb al vanalles geprobeerd zoals zelfs het faken van aanhalingstekens (-c $(echo "'"${naam}"'") maar dat resulteert alleen in alleen het laatste deel van de naam, danwel dat laatste deel met een apostrof erna tot zelfs letterlijk $naam. Suggesties?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
| #!/bin/sh
groep=8
##############################################
let gid=${groep}+40000
namenLijst=groep-${groep}.txt
aantalNamen=$(cat ${namenLijst} | sed -n '$=')
echo
for i in $(seq 1 ${aantalNamen});
do
naam=$(head -${i} ${namenLijst} | tail -1)
voornaam=$(echo ${naam} | cut -d" " -f1);
achternaam=$(echo ${naam} | cut -d" " -f2-);
an1=$(echo ${achternaam} | cut -d" " -f1);
an2=$(echo ${achternaam} | cut -d" " -f2);
an3=$(echo ${achternaam} | cut -d" " -f3);
an4=$(echo ${achternaam} | cut -d" " -f4);
elan1=$(echo $an1 | head -c1);
elan2=$(echo $an2 | head -c1);
elan3=$(echo $an3 | head -c1);
elan4=$(echo $an4 | head -c1);
echo ${naam}
if [ "${elan4}" = "${elan3}" ];
then eersteLettersAchternaam=${elan1}${elan2}${elan3};
else eersteLettersAchternaam=${elan1}${elan2}${elan3}${elan4};
fi
if [ "${elan3}" = "${elan2}" ];
then eersteLettersAchternaam=${elan1}${elan2};
else eersteLettersAchternaam=${elan1}${elan2}${elan3};
fi
if [ "${elan2}" = "${elan1}" ];
then eersteLettersAchternaam=${elan1};
else eersteLettersAchternaam=${elan1}${elan2};
fi
achternaamZonderSpaties=$(echo ${achternaam} | tr ' ' -d)
gebruikersnaam=$(echo ${voornaam}${eersteLettersAchternaam} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz');
uidVN=$(echo ${voornaam} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ-' '246824682468246824682468242' | tr 'abcdefghijklmnopqrstuvwxyz' '24682468246824682468246824')
uidAN=$(echo ${achternaamZonderSpaties} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ-' '246824682468246824682468242' | tr 'abcdefghijklmnopqrstuvwxyz' '24682468246824682468246824' | head -c7)
uidpreGN=$(echo ${gebruikersnaam} | tr 'qwertyuiopasdfghjklzxcvbnm-' '246824682468246824682468242' | tail -c10)
let uidGN=$(dd if=/dev/urandom count=1 2> /dev/null | cksum | cut -f1 -d" ")*${uidpreGN}
while [ 15000000 -le ${uidVN} ]; do let uidVN=${uidVN}/2; done
while [ 35000000 -le ${uidAN} ]; do let uidAN=${uidAN}/2; done
while [ 999999 -le ${uidGN} ]; do let uidGN=${uidGN}/4; done
let preuid=(2*${uidVN}+${uidAN}+3*${uidGN})/2
let uid=(${preuid}/666*${preuid})/616
while [ 1500000000 -le ${uid} ]; do let uid=${uid}/4; done
while [ ${uid} -le 50001 ]; do let uid=${uid}*6; done
while [ 1500000000 -le ${uid} ]; do let uid=${uid}/2; done
shell=/bin/false
home=/home/${gid}/${gebruikersnaam}
skeldir=/etc/skel-${gid}
##############################################
echo ${naam} '('${voornaam} ${achternaam}')' krijgt gebruikersnaam ${gebruikersnaam} toegewezen
echo en komt als ID${uid} in de database te staan.
echo
/usr/sbin/smbldap-useradd -u ${uid} -g ${gid} -d ${home} -s ${shell} -c ${naam} -S ${voornaam} ${gebruikersnaam}
done; |
Het hele principe werkt, op één ding na: ook de volledige naam van de leerling moet in de datbase komen (gecos noemt smbldap-useradd het) zodat die in Menu Start kan verschijnen en later nog voor andere doeleinden gebruikt kan worden. Het punt is dat mijn variabele die de/het(?) gecos doorgeeft niet goed wordt geïnterpreteerd door smbldap-useradd. De naam bevat namelijk spaties en ik denk dat hij daardoor over z'n nek gaat. (Als ik de naam hard in het bestand zet met aanhalingstekens eromheen gaat het wél goed). Ik heb al vanalles geprobeerd zoals zelfs het faken van aanhalingstekens (-c $(echo "'"${naam}"'") maar dat resulteert alleen in alleen het laatste deel van de naam, danwel dat laatste deel met een apostrof erna tot zelfs letterlijk $naam. Suggesties?
[ Voor 7% gewijzigd door Z-Dragon op 05-03-2006 11:31 . Reden: If-voorwaarde onder elkaar gezet ten behoeve van overzichtelijkheid ]
^ Wat hij zegt.