CSV einlese

F

flugopa

Hallo,

ich brauche mal wieder ein Anstoß in die richtige Richtung.
Was will ich?

Eine CSV-Datei (Beispiel: Vorname;Nachnahme;Geb;u.s.w.)
mit cut -d ; -f1,2,3 komme ich nicht richtig weiter.

Vorname soll dann in $1 stehen
Nachname soll dann in $2 stehen
u.s.w.

Ich brauche die $1, $2, $3.
Wer hat eine Beispielzeile für mich?
 
Hallo flugopa,

so vielleicht:

Code:
#!/bin/bash
while read ZL
do
  vna=$(echo $ZL | cut -d";" -f1)
  nna=$(echo $ZL | cut -d";" -f2)
  geb=$(echo $ZL | cut -d";" -f3)
  printf "TEST: Vorname=%s - Nachname=%s - Gebtag: %s\n" $vna $nna $geb
done < ./flugopa.csv

Gruss zst
 
Welche Shell wird verwendet? Im Falle der bash kann man den Internal Field Separator benutzen:

Code:
$ csv="aaa;bbb;ccc"
$ IFS=';'; set $csv; echo "\$1=$1 \$2=$2 \$3=$3"; unset IFS
$1=aaa $2=bbb $3=ccc

Gruss, Xanti
 
Es gibt auch die Möglichkeit mit der Variable IFS zu spielen, das spart die ganzen cut - Aufrufe:
Code:
IFS=$';';
echo 'foo bar;foobar;13121989; weitere Teile'|while read a b c dummy;
do 
echo "Das steht in 3: $c";
echo "Das steht in 1: $a";
echo "Das steht in 2: $b"
done


Gruß Wolfgang
 
Hallo,

#>>> FRAGE: Wie kann ich das Smbpasswd-Passwort "mitgeben" ?


nach längerer Zeit habe ich mir nun das Skript gebastelt.
Es gibt bestimmt bessere Methoden um das gleiche Ergebnis zu erreichen, aber jeder Anfang ist Mühevoll.

##############################################
#!/bin/bash

# Einlesen einer csv-Datei mit der Struktur:
# Vorname;Nachname;Geburtstag;Wohnort

declare -i a1=`date +%Y+1`
b1=`date +%m-%d`
ABLAUFDATUM=$a1-$b1

if [ ! `grep GRP_SAMBA /etc/group` ]; then
groupadd GRP_SAMBA
fi

DATUM=`date +%d.%m.%Y`

while read ZL
do
Vorname=$(echo $ZL | cut -d";" -f1)
Nachname=$(echo $ZL | cut -d";" -f2)
LOGIN_NAME=$Vorname"."$Nachname
if [ ! `cut -d: -f1 /etc/passwd | grep $LOGIN_NAME` ]; then
echo -e "Erstelle Account für: " $LOGIN_NAME

GEBURTSTAG=$(echo $ZL | cut -d";" -f3)
WOHNORT="GRP_"$(echo $ZL | cut -d";" -f4)

if [ ! `grep $WOHNORT /etc/group` ]; then
groupadd $WOHNORT
fi

PASSWORT=$LOGIN_NAME"_"$GEBURTSTAG

useradd -c "Konto durch Skript am $DATUM angelegt." -d /home/users/$LOGIN_NAME -e $ABLAUFDATUM -f 30 -g $WOHNORT -G GRP_SAMBA -m -n -p $PASSWORT $LOGIN_NAME

#>>> FRAGE: Wie kann ich das Passwort "mitgeben" ?
smbpasswd -a $LOGIN_NAME
#>>> Hier will ein Passwort.


fi

sleep 1
done < /home/userliste
 
Moin,

expect ist was Du suchst :D


Vielen Dank für die richtige Info.
Flugopa


Zu früh gefreut: TESTDATEI
#!/bin/bash
while read ZL
do
Vorname=$(echo $ZL | cut -d";" -f1)
Nachname=$(echo $ZL | cut -d";" -f2)
LOGIN_NAME=$Vorname"."$Nachname
PASSWORT=$(echo $ZL | cut -d";" -f3)
useradd -p $PASSWORT $LOGIN_NAME

smbpasswd -a $LOGIN_NAME
except New SMB password:
send $PASSWORT
except Retype new SMB password:
send $PASSWORT
smbpasswd -e $LOGIN_NAME

done < /home/userliste

echo -e "\n\n"

cat /etc/samba/smbpasswd

read pause


while read ZL
do
Vorname=$(echo $ZL | cut -d";" -f1)
Nachname=$(echo $ZL | cut -d";" -f2)
LOGIN_NAME=$Vorname"."$Nachname
smbpasswd -x $LOGIN_NAME
userdel $LOGIN_NAME
done < /home/userliste


Es geht mir um die autom. Übergabe von Passwörtern in Samba.
Wer hat noch Ideen?
 
Zuletzt bearbeitet von einem Moderator:
Huhu...normal solltes Du eine Fehlermeldung bekommen - bitte posten,
denn mit except kanns nicht funktionieren *g es heißt nämlich expect!! :D
 
Zu früh gefreut

Huhu...normal solltes Du eine Fehlermeldung bekommen - bitte posten,
denn mit except kanns nicht funktionieren *g es heißt nämlich expect!! :D

Ich hatte mich zu früh gefreut.
Kann einer das Script richtig stellen?


./c1.sh: line 12: except!!: command not found
./c1.sh: line 13: send: command not found
./c1.sh: line 14: except!!: command not found
./c1.sh: line 15: send: command not found


#!/bin/sh

while read ZL
do
Vorname=$(echo $ZL | cut -d";" -f1)
Nachname=$(echo $ZL | cut -d";" -f2)
LOGIN_NAME=$Vorname"."$Nachname
PASSWORT=$(echo $ZL | cut -d";" -f3)
useradd -p $PASSWORT $LOGIN_NAME

smbpasswd -a $LOGIN_NAME
except!! "New SMB password:"
send $PASSWORT
except!! "Retype new SMB password:"
send $PASSWORT
smbpasswd -e $LOGIN_NAME

done < /home/userliste

echo -e "\n\n"

cat /etc/samba/smbpasswd

read pause


while read ZL
do
Vorname=$(echo $ZL | cut -d";" -f1)
Nachname=$(echo $ZL | cut -d";" -f2)
LOGIN_NAME=$Vorname"."$Nachname
smbpasswd -x $LOGIN_NAME
userdel $LOGIN_NAME
rm -rf /home/vor*
done < /home/userliste
 
Hallo??!

Ließ mal bitte was da da steht!

Also probiers richtig!!


smbpasswd -a $LOGIN_NAME
expect "New SMB password:"
send $PASSWORT
expect "Retype new SMB password:"
send $PASSWORT
smbpasswd -e $LOGIN_NAME
 
Bash-Master gesucht

Hallo,

leider ist es als Anfänger sehr schwer den passenden Syntax zu finden.
Worum geht es?

Neue Usernamen mit Passwörtern per Skript + Liste aufzunehmen.
(CSV-Liste)

Wer hat ein Codeschnipsel übrig, oder kennt anderen Foren von Bash-Mastern?
 
SAMBA-Passwortübergabe gelöst

Hallo,

manchmal ist man ganz schön blind, so wie ich.

Wer es mit expect machen will..., der muß wahrscheinlich die Installation yum install expect "ankurbeln", oder man macht es so:

#!/bin/sh
LOGIN_NAME="HUBER1"
PASSWORT="HUBER1"
useradd -p $PASSWORT $LOGIN_NAME
printf $PASSWORT"\n"$PASSWORT"\n" | smbpasswd -a -s $LOGIN_NAME
smbpasswd -e $LOGIN_NAME

Und was ist für die Experten so schwer daran? Kopfschüttl :( :think:
 
Wenn du unfähig bist dein Problem zu beschreiben ist das nicht unser Problem.

Lies dir nochmal den Thread durch und du weißt warum.
 
Wenn du unfähig bist dein Problem zu beschreiben ist das nicht unser Problem.

Lies dir nochmal den Thread durch und du weißt warum.

Evtl. hast Du Recht, aber die "lebende Legende" würde ich ablegen, wenn ich aus dem Thread mit den Stichwörter: CSV, SAMBA, Passwörter, Skript keine Schlussfolgerung ziehen kann.

Alles ist freiwillig und keiner muß, oder ?

Schreib jetzt, was Du willst.
 

Ähnliche Themen

chown Befehl in einem Script

Keine grafische Oberfläche (Debian Installation)

[gelöst] bash, cut - wahrscheinlich die 1000.

E/A-Fehler (.snapshots is not a btrfs subvolume).

Partitionierung für UEFI Boot für Linux

Zurück
Oben