Permalänk

Shellscript Fråga

Jag har en fråga angående shellscripts programering i UNIX..jag är rätt mkt noob på de området men om man använder en variabel som sk ha olika värden man måste skriva in förhand...
tex göra en lista på användare och skriva in användar namnen...hur kan man då göra de?
I andra grafiska språk tex VB kan man ju göra detta genom en textbox men hur gör man de i endast kommando rad format som när man skriver ett shellscript och ska köra de?
Hoppas ni förstår min fråga.
Tack på förhand

Permalänk
Medlem

(entity@thor ~): cat test #!/bin/sh echo $@ echo "\$1 $1" for i in $@; do echo $i done (entity@thor ~): ./test foo bar foo bar $1 foo foo bar (entity@thor ~):

Visa signatur

"Stallman to Dvorak: Welcome to freedom, your rulebook is in the mail" - Fake Steve Jobs
rfc-1925 - The Twelve Networking Truths

Permalänk

Någon förklaring till de där hehe?

Permalänk
Medlem

Vet inte om jag förstod dig precis rätt men. Om du har en befintlig lista du vill lägga till fler värden i så skulle ett script kunna se ut som följande:

#!/bin/bash
for lista in $(cat "$1"); do #En loop startas som kommer gå igenom samtliga rader i angiven lista
echo "$lista" # Värdet från listan skrivs ut
read nyuppgift # Här läses det nya värdet in
echo "$lista" "$nyuppgift" >> "$2" # Lista med både nytt och gammalt värde skrivs
done # Scriptet startar om tills det inte finns några rader kvar i den angivna listan

Nu har jag använt både överdrivet med kommentarer och onödigt långa variabelnamn för att vara extra tydlig.

För att starta skriptet skriver du ./scriptfil /genväg/till/gammal/lista /genväg/till/ny/lista

Vill du skapa en ny lista passar sig detta skriptet bättre.

#!/bin/bash
echo "Fyll i uppgifter och skriv done när du är klar"
until [ "$uppgift" == "done" ] &> /dev/null; do
read uppgift
if [ "$uppgift" == "done" ]; then
echo "" >> "$1"
else
echo "$uppgift" >> "$1"
fi
done

För att köra detta skriver du ./scriptfil /genväg/till/ny/lista

Vill du skapa en lista på alla användare som finns i ditt system kan du använda dig av detta skript.
#!/bin/bash
for lista in $(cat /etc/passwd); do
echo "$lista" | cut -d : -f 1 >> "$1"
done

För att köra detta skriver du ./scriptfil /genväg/till/ny/lista

Lycka till

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av LoneWolf2000
Någon förklaring till de där hehe?

det enda som du egentligen behöver för att läsa in saker som skickas med på kommandoraden är variabeln $@ som innehåller allt efter scriptets namn, i exemplet som jag gav dig var det "foo bar".

det enda som scriptet som jag skrev där gör är att visa lite olika sätt att använda den variabeln...

För att använda samma exempel på användare istället betänkt detta(kallar det mpasswd):

#!/bin/sh for i in $@; do passwd $i done

detta korta script kommer att be dig byta lösen på alla användare som du ger det som argument.

ex:

$ ./mpasswd anv1 anv2 anv3

Visa signatur

"Stallman to Dvorak: Welcome to freedom, your rulebook is in the mail" - Fake Steve Jobs
rfc-1925 - The Twelve Networking Truths

Permalänk

Om jag ska lägga till användare med själva scriptet? Hur ska de köras då med useradd så att användarna blir registerade från informationen man har skrivit in i listan?

Permalänk
Medlem

det beror lite på hur du hade tänkte göra det, i *BSD finns det redan ett script som kan addera från en lista, det heter adduser.

men om du nu vill göra det med useradd och en lista, gör så här:
skapa en lista med namn model

anv1 anv2 anv3

sen ett lätt script som:

#!/bin/sh for i in `cat $@`; do # ja vilken typ av "fnutt" som du använder är mkt viktigt.. useradd <en massa options som vanligtvis är samma för alla användare> $i done

som du sedan kör som:

# ./script /path/to/list

sen kan man alltid lägga till saker som att den autogenererar lösenorde med apg eller vad mer som man nu kan komma på..

Visa signatur

"Stallman to Dvorak: Welcome to freedom, your rulebook is in the mail" - Fake Steve Jobs
rfc-1925 - The Twelve Networking Truths

Permalänk

Om man gör såhär kanske...Skapar en lista med användare och hemkatalog som ser ut:
/export/home/jocke jocke

osv med dem man vill ha..

Sedan skapar en variabel $userraknare = 40 om de är 40 användare tex

sedan har man detta scriptet..hur skule de funka och om inte varför funkar de inte?

#!/bin/bash

$a=0

while $a < $userraknare
do
for $katalog $name in list
useradd -m -d $katalog $name
done
$a+1
done