Vraag gegevens verzamelen, opslaan in een bestand en opnieuw uitvoeren in bash-script;


Ik ben nieuw bij bash en heb dit script geschreven om gegevens te verzamelen en het vervolgens op te slaan in een geautomatiseerd bestand. Het loopt hier prima, maar als ik het script opnieuw probeer uit te voeren om nog meer details toe te voegen, krijg ik fouten.

#!/bin/bash

#This program helps the user to collect contact details.
clear

options="Add_User End_session"

echo "1. Add another user"
echo "2. End session"
echo -n "Enter Selection:"
     read selection
     echo ""

select opt in $options; do

if ["$opt" = "End Session" ]; then
echo done
exit

elif ["opt" = "Add another user"]; then

echo "Dear, user . This script will help you to collect data from people."

echo "Type the name:"
read name
echo "Type the age:"
read age
echo "Type the address:"
read address
echo "Type the gender:"
read gender
echo "Type the phone number:"
read phone number
echo "Type the email:"
read email

echo "Full Details"

echo "$name"
echo "$age"
echo "$address"
echo "$gender"
echo "$phone"
echo "$email"

echo "Name: $name" >> Datacollection.txt
echo "Age: $age" >> Datacollection.txt
echo "Address: $address" >> Datacollection.txt
echo "Gende: $gender" >> Datacollection.txt
echo "Phone Number: $phonenumber" >> Datacollection.txt
echo "E-mail Address: $email" >> Datacollection.txt

else
clear
echo bad option
fi
done

1
2017-12-03 01:39


oorsprong


Merk op dat de [ in een if-statement is eigenlijk een commando (type help '[' in een terminal), niet alleen syntaxis. Net als elke andere shell-opdracht moet er een spatie tussen de opdrachtnaam en het eerste argument zijn: if [ "$opt" ... - glenn jackman


antwoorden:


U hebt de aard van de fouten niet opgegeven. U moet altijd de exacte foutmelding (en) opgeven wanneer u om hulp vraagt. Anders is het net alsof u anderen de opdracht geeft om al uw foutopsporing voor u te doen. Neem een ​​paar seconden de tijd om de meest elementaire en voor de hand liggende informatie te geven, en je zult waarschijnlijk veel meer hulp krijgen.

Toch zijn hier een paar opmerkingen:

  1. Bij het lezen van het telefoonnummer heb je een spatie, wat betekent dat je in twee afzonderlijke variabelen leest. Wanneer je het in het bestand probeert te plaatsen, bel je de variabele met een andere naam.

    echo "Type the phone number:"
    read phone number
    #...
    echo "Phone Number: $phonenumber" >> Datacollection.txt
    
  2. U hebt spaties tussen vierkante haken nodig ([]) en hun inhoud. Dus deze regel is verkeerd:

    elif ["opt" = "Add another user"]; then
    
  3. In aanvulling op het voorgaande, wees voorzichtig met wat u aan het vergelijken bent. Je hebt geen dollarteken voor "opt", dus je vergelijkt de letterlijke tekenreeks, niet de waarde ervan.
  4. Uw optieselectieroutine is volledig verbroken. Je moet het weggooien en herschrijven met een andere aanpak. Tip: wat de gebruikerstypes ook zijn, wordt opgeslagen in de variabele waarnaar u overschakelt read. Je zult die waarde testen, dus bedenk goed wat de gebruiker moet typen en hoe je dat kunt communiceren. Hint 2: Type help select om de documentatie te zien voor een goede manier om dit te benaderen.

  5. Eindelijk, een echt waardevolle tool voor het debuggen van je script is set -x. Zet het bovenaan je script. Dan kun je alles in je script zien zoals de shell het interpreteert. Als daar iets niet klopt, heb je een fout ontdekt.


3
2017-12-03 06:30