bash scripting (forschleife + if anweisung)

Hallo zusammen....
ich arbeite seit 3 Wochen ca. mit Linux und möchte nun einen Einstieg in das bash scripting beginnen um alltägliche Arbeitsschritte zu erleichtern.

Dazu habe ich folgendes Script geschrieben.

Code:
#! /bin/bash
#----------------------------------------------------------------------
# Description: Wir beschmipfen alle Lokalen User
# Author: root <>
# Created at: Fri Oct 27 11:24:44 CEST 2006
# Computer: debian
# System: Linux 2.6.16-2-k7 on i686
#    
# Copyright (c) 2006 root  All rights reserved.
#
#----------------------------------------------------------------------
# Configure section:

#----------------------------------------------------------------------
#
# main()

 
for idiot in `cat /etc/passwd | cut -d: -f1`
do
	if idiot -le[100] then
	echo "Hallo $idiot , du darfst nicht angemacht werden!"
		
	else     
		echo "Hallo $idiot, du bist ein Idiot"
	fi
done

Bis dato ist es mir gelungen alle user zubeschimpfen - ich möchte nun allerdings das superuser nicht beschimpft werden.
dazu die if anweisung -le[100]

kann ich das so machen ? wenn ja wo ist der fehler? auf line 24 soll irgendwas sein... wie gesagt bin total planlos und freue mich auf eure hilfe

LG
 
Bei dem if muss es wohl "$idiot" heißen und zudem steht da dann ja "root" drin... Semikolon....
Code:
if test "$idiot" = "root" ; then
 
hmm aber superuser heißt ja nicht gleich root oder?
das wird doch begrenzt oder nicht? alles was größer 1000 ist oder so?

habe das mal darauf abgeändert...

Code:
for idiot in `cat /etc/passwd | cut -d: -f3`
do
	if test $idiot <=1000 ; then
	echo "Hallo $idiot , du darfst nicht angemacht werden!"
		
	else     
		echo "Hallo $idiot, du bist ein Idiot"
	fi
done

jetzt vergleiche ich zuerst zeile f3 wo ja die user angaben stehen
es kommt nur eine fehlermeldung an der stelle if test $iditon <=1000...

wie würde die syntax dafür lauten?

problem ist an der sache nur, dass es bei idiot noch zahlen ausgeben würde
kann ich das nicht alles in einen cut befehl packen?
 
Code:
#!/bin/sh

IFS=":"
cut -d: -f1,3 /etc/passwd | while read u i
do
    if test $i -le 1000 ; then
        echo "Hallo $u, du darfst nicht angemacht werden!"
    else
        echo "Hallo $u, du bist ein Idiot"
    fi
done

Das was du meinst sind wohl Systembenutzer, also Benutzerkennungen für Dienste etc, mit denen sich aber meistens keinen anmelden kann.
 
kannst du mir kurz erklären , was ips=":" zubedeuten hat?
und dieses
"while read u i"
solange u und i gelesen werden oder wie?


und warum immer test?

am besten wäre du hast mal ein link für mich , damit ich die ganze syntax besser auf die reihe kriege
 
Code:
#!/bin/sh

IFS=":"
#Das Standtrennzeichen wird auf ":" gesetzt, wird für read benötigt.
cut -d: -f1,3 /etc/passwd | while read u i
# solange read was zu lesen bekommt.
# Wobei die Zeilen mittels dem IFS von oben aufgetrennt werden
# "root:0" => u="root" und i="0"
do
    if test $i -le 1000 ; then
#siehe "man test" "-lt" ist für Zahlen, less-than, also <=
        echo "Hallo $u, du darfst nicht angemacht werden!"
    else
        echo "Hallo $u, du bist ein Idiot"
    fi
done
 
super =) jetzt hab ich es verstanden.... danke dir.

hast du oder habt ihr vielleicht irgendwelche internet tutorials ?

ich denke nämlich , dass bash scripting von nutzen seien kann :D
 
Drei Optimierungsvorschläge:

1.) Sortierung nach UID und somit Gruppierung von "Idioten" und "Nicht-Idioten"
2.) Abkürzung des <test>-Statements
3.) <-le 1000> würde den User mit der UID 1000 fehlinterpretieren, ergo: <-lt 1000>

Sieht dann so aus:
Code:
#!/bin/sh

IFS=":"
cut -d: -f1,3 /etc/passwd | sort -t: -k2n | while read u i; do
    [ $i -lt 1000 ] && echo "Hallo $u, du darfst nicht angemacht werden!" || echo "Hallo $u, du bist ein Idiot"
done
Greetz
Hackse
 
Zurück
Oben