2017-06-28 1 views
0

In meinem Skript wird der Name des Kunden nicht korrekt in der for loop.please mein Problem zu beheben. { #/bin/bashIch möchte alle Kundenname Werte mit dem jeweiligen gegebenen Wert (c_name) überprüfen

echo " --- Enter the Database name ---" 
read databasename 

echo " --- enter the table name --- " 
read table_name 



sqlite3 $databasename.db "DROP TABLE IF EXISTS $table_name;" 


sqlite3 $databasename.db "CREATE TABLE IF NOT EXISTS $table_name(cus_id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,cus_name TEXT NOT NULL UNIQUE ,cus_domain TEXT UNIQUE, cus_status TEXT NOT NULL,Port INTEGER NOT NULL);" 


echo " --- Enter the total number of customer records do you want ---" 
read cus_count 


echo "--- Enter the following details one by one---" 

port_num=8080 
declare -a customer 

for((i=1;i<=cus_count;i++)) 
do 

echo "enter the $i customer details" 

echo "---Enter the customer name---" 
read c_name 


customer=$(sqlite3 $databasename.db "select cus_name from $table_name;") 



for cus in "${customer[@]}" 
do 

c_domain="$c_name" 

if [[ "$c_name" != "$customer" ]] 

then 
    echo "---Enter the Status(Active/Inactive)---" 
    read c_status 

if [[ "$port_num" == "$port_num" ]]; then 
     port_num=$(($port_num + 1)) 

sqlite3 $databasename.db "BEGIN TRANSACTION;INSERT OR IGNORE INTO $table_name(cus_name,cus_domain,cus_status, Port) VALUES(\"$c_name\",\"${c_domain,,}.in\",\"$c_status\",\"$port_num\") ;COMMIT;" 

fi 

else 
    echo "!!!OOPS, you entered customer name already available!!!" 
    echo "---Please enter new customer name---" 

i=$(($i - 1)) 

fi 
done 
done 

echo " --- Records from the $table_name ---" 

sqlite3 $databasename.db "select * from $table_name;"} 

Ausgang 1:

mahendranatarajan @ amachu-Inspiron-3558: ~ ./new2.sh $

--- den Namen der Datenbank eingeben - -

Demo

--- geben Sie den Tabellennamen ---

demo_table

--- die Gesamtzahl der Kundendaten eingeben wollen Sie ---

--- Geben Sie die folgenden Angaben nacheinander ---

eingeben die 1 Kundendaten

--- Geben Sie den Kundennamen ---

ABC

--- Geben Sie den Status (aktiv/inaktiv) ---

Aktive

geben Sie die 2 Kundendaten

--- Geben Sie den Kundennamen ---

ABC

!!! OOPS Sie eingegeben Kundenname bereits verfügbar !!!

--- Bitte geben Sie neuen Kundennamen ---

geben Sie die 2 Kundendaten

--- Geben Sie den Namen des Kunden ---

BCD

--- Geben Sie den Status (aktiv/inaktiv) ---

Aktive

Geben Sie die 3 Kundendaten

--- Geben Sie den Namen des Kunden ---

ABC

--- Geben Sie den Status (aktiv/inaktiv) ---

Aktive

--- Datensätze aus der demo_table ---

1 | ABC | abc.in | Aktiv | 8081

2 | BCD | bcd.in | Aktiv | 8082

mahendranatarajan @ amachu-Inspiron-3558: ~ $

ich hier ersten Wert als "ABC" gebe dann zweiten Wert als "ABC" zeigt es dann die Warnmeldung korrekt an. aber die folgende Ausgabe gebe ich ersten Wert als "ABC" dann zweiten Wert als "BCD" dann dritten Wert als "ABC", aber ich kann nicht die Warnmeldung richtig bekommen. Was kann ich für dieses Problem tun ..?

Ausgang 2:

mahendranatarajan @ amachu-Inspiron-3558: ~ $ ./new2.sh

--- Geben Sie den Namen der Datenbank ---

Demo

- - geben Sie den Namen der Tabelle ---

demo_table

--- Ent er die Gesamtzahl der Kundendaten wollen Sie ---

--- Geben Sie die folgenden Details nacheinander ---

geben Sie die 1 Kundendaten

- Betretet den Kundennamen ---

ABC

--- Geben Sie den Status (aktiv/inaktiv) ---

Aktive

geben Sie die 2 Kundendaten

--- Geben Sie den Namen des Kunden ---

BCD

--- Geben Sie den Status (aktiv/inaktiv) ---

Aktive

geben Sie die 3 Kundendaten

--- Geben Sie den Kundennamen ---

ABC

--- Geben Sie den Status (aktiv/inaktiv) ---

Aktive

--- Datensätze aus die demo_table ---

1 | ABC | abc.in | Aktiv | 8081

2 | BCD | bcd.in | Aktiv | 8082

mahendranatarajan @ amachu-Inspiron-3558: ~ $

+0

Bitte formatieren Sie Ihre Ausgabe mit Markdown zum Zweck der Lesbarkeit. – Yunnosch

+0

@Yunnosch done .. – Mahendranatarajan

+0

versuchen 'if [[" $ c_name "! =" $ Cus "]]' – pikand

Antwort

1

Das Problem mit der Schleife ist die Abfrage "select cus_name from $table_name;". Dies ist die Auswahl aller cus_name in der Tabelle und das Auffüllen des Arrays. Um dies zu beheben in Ihrem obigen Beispiel, wenn Sie die ersten Kundennamen wieder zur Verfügung stellen, nachdem die zweite Kunde Eingabe Ihre Anfrage abruft das Ergebnis folgenden

++ 'select cus_name from demo_table' + customer='ABC BCD' Aus diesem Grunde ist Sie, wenn die Bedingung

+ [[ ABC != \A\B\C\\B\C\D ]]

schlägt fehl Ihr Problem Abfrage auf unter

"select cus_name from $table_name where cus_name like '$c_name';") Dies wird überprüfen

ändern, wenn der Kunde vor die DB und wenn der Kunde existiert und den Kundennamen zurückgibt. Wenn ABC existiert, wird ABC zurückgegeben und Ihre if-Bedingung wird korrekt funktionieren.

+0

danke @ukrsp – Mahendranatarajan

Verwandte Themen