Vinnaren i pepparkakshustävlingen!
2017-03-09, 12:03
  #1
Medlem
RingInteSnutens avatar
Tjena,

Jag försöker skriva ett enkelt script för att skapa användarkonton.
Allting fungerar bra, jag lyckas skapa ett konto och sätta ett lösenord.

Problemet är att efter att första kontot har skapats, så vill jag få frågan utifall jag vill skapa ett till och börja om ifrån toppen. Nu loopar det bara med att kontot har skapats "Enter new password".
Vill som sagt bryta den loopen och skapa ett nytt konto direkt, eller avbryta scriptet.

Kod:
#!/bin/bash
#
# Create user accounts & their passwords
#########################################
#
# Obtain vaiable value ##
#echo
echo -e "Would you like to create a new account? \c"
#
read answer
	if [ $answer == 'yes' ]
		then
			echo -e "Please enter a username for the account: "
			read Username
	fi
				until [ "$Username" = "Exit" ] || [ "$Username" = "" ] || [ "$Username" = "exit" ] 
				do
				# Create user account ##
				echo Account for $Username is being created...
				#
				useradd $Username
#
	# Set user account password ###
	#
	echo Password for $Username is being set...
	#
	passwd $Username
	#
	chage -d 0 $Username
	#
	#	 Display acocunt record ###
	#
	User_Record=$(grep $Username /etc/passwd)
	#
	echo
	echo Here is $Username\'s record\:
	echo $User_Record
	echo
	#
	echo Account $Username is ready for use.
done
#
echo Leaving script...
exit
##########################################

Jag anar att det ser smuttsigt ut nu, men det kommer jag städa upp när jag fått det att funka.

Tackar tackar!
Citera
2017-03-09, 16:35
  #2
Medlem
Citat:
Ursprungligen postat av RingInteSnuten
Tjena,

Jag försöker skriva ett enkelt script för att skapa användarkonton.
Allting fungerar bra, jag lyckas skapa ett konto och sätta ett lösenord.

Problemet är att efter att första kontot har skapats, så vill jag få frågan utifall jag vill skapa ett till och börja om ifrån toppen. Nu loopar det bara med att kontot har skapats "Enter new password".
Vill som sagt bryta den loopen och skapa ett nytt konto direkt, eller avbryta scriptet.

Jag anar att det ser smuttsigt ut nu, men det kommer jag städa upp när jag fått det att funka.

Tackar tackar!

Ditt script fortsätter att loopa i all oändlighet efter att ett konto har skapats.

Din loop-design är lite konstig. Enklast(?) torde vara att göra en loop av hela grejen, så länge svaret är yes ska användaruppläggning göras, i annat fall avbryta. Jag har för den sakens skull flyttat om lite i din kod och lagt allt i en huvudsaklig while-loop.

Här är min variant på ditt program:

Kod:
#!/bin/bash
#
# Create user accounts & their passwords
#########################################
#

# Tillåt case insensitive-matchning av variabelinnehåll (YES, yes, YeS är samma...)
shopt -s nocasematch

while (true) # Så länge true är true (alltid), gör följande
do
echo -e "Would you like to create a new account? \c"
read answer
    if [[ $answer == "yes" ]] # Dubbel-hakklamrar för case insensitive matchning tack vare shopt -s nocasematch ovan
        then
            echo -e "Please enter a username for the account: "
            read Username
            # Create user account ##
            echo Account for $Username is being created...
            #
            useradd $Username

            # Set user account password ###
            #
            echo Password for $Username is being set...
            #
            passwd $Username
            #
            chage -d 0 $Username
            #
            #    Display acocunt record ###
            #
            User_Record=$(grep $Username /etc/passwd)
            #
            echo
            echo Here is $Username\'s record\:
            echo $User_Record
            echo
            #
            echo Account $Username is ready for use.
    else # Allt annat än att svara yes på frågan innebär exit
        echo Leaving script...
        exit 0
    fi
done
exit 0
##########################################

För din info:
- usermod är ett alternativ till chage, chpasswd för passwd i scripting
- När du använder dig av exit, avsluta gärna med en exit-kod (0 för vanlig)
- http://tldp.org/LDP/abs/html/ är "the" guide för bash scripting.
__________________
Senast redigerad av Regentia 2017-03-09 kl. 16:37.
Citera
2017-03-10, 08:39
  #3
Medlem
RingInteSnutens avatar
Citat:
Ursprungligen postat av Regentia
Ditt script fortsätter att loopa i all oändlighet efter att ett konto har skapats.

Din loop-design är lite konstig. Enklast(?) torde vara att göra en loop av hela grejen, så länge svaret är yes ska användaruppläggning göras, i annat fall avbryta. Jag har för den sakens skull flyttat om lite i din kod och lagt allt i en huvudsaklig while-loop.

Här är min variant på ditt program:

Kod:
#!/bin/bash
#
# Create user accounts & their passwords
#########################################
#

# Tillåt case insensitive-matchning av variabelinnehåll (YES, yes, YeS är samma...)
shopt -s nocasematch

while (true) # Så länge true är true (alltid), gör följande
do
echo -e "Would you like to create a new account? \c"
read answer
    if [[ $answer == "yes" ]] # Dubbel-hakklamrar för case insensitive matchning tack vare shopt -s nocasematch ovan
        then
            echo -e "Please enter a username for the account: "
            read Username
            # Create user account ##
            echo Account for $Username is being created...
            #
            useradd $Username

            # Set user account password ###
            #
            echo Password for $Username is being set...
            #
            passwd $Username
            #
            chage -d 0 $Username
            #
            #    Display acocunt record ###
            #
            User_Record=$(grep $Username /etc/passwd)
            #
            echo
            echo Here is $Username\'s record\:
            echo $User_Record
            echo
            #
            echo Account $Username is ready for use.
    else # Allt annat än att svara yes på frågan innebär exit
        echo Leaving script...
        exit 0
    fi
done
exit 0
##########################################

För din info:
- usermod är ett alternativ till chage, chpasswd för passwd i scripting
- När du använder dig av exit, avsluta gärna med en exit-kod (0 för vanlig)
- http://tldp.org/LDP/abs/html/ är "the" guide för bash scripting.


Vackert! Tack så hemskt mycket nu funkar det fin fint.
Ska även ta och läsa denna guiden!
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback