在我的脚本中,客户名称在for loop.please修复我的问题中没有正确比较。{ #!/bin/bash
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;"}
输出1:
邮箱: mahendranatarajan@amachu-Inspiron-3558:~$ ./new2.sh
-输入数据库名称
演示
-输入表名
demo_table
-输入您想要的客户记录总数
3.
-逐一输入以下详细信息
输入1个客户详细信息
-输入客户名称
ABC
-输入状态(Active/Inactive)
活动的
输入2个客户详细信息
-输入客户名称
ABC
!您输入的客户名称已经可用!
-请输入新客户名称
输入2个客户详细信息
-输入客户名称
BCD
-输入状态(Active/Inactive)
活动的
输入3个客户详细信息
-输入客户名称
ABC
-输入状态(Active/Inactive)
活动的
-来自demo_table的记录
1|ABC|abc.in|Active|8081
2|BCD|bcd.in|Active|8082
邮箱: mahendranatarajan@amachu-Inspiron-3558:~$
在这里,我给出了第一个值为"ABC“,第二个值为"ABC”,然后它正确地显示了警告消息。但是在下面的输出中,我给出了第一个值为"ABC“,第二个值为"BCD”,然后第三个值为"ABC“,但是我不能得到警告消息,我能为这个问题做些什么吗? properly.what?
输出2:
邮箱: mahendranatarajan@amachu-Inspiron-3558:~$ ./new2.sh
-输入数据库名称
演示
-输入表名
demo_table
-输入您想要的客户记录总数
3.
-逐一输入以下详细信息
输入1个客户详细信息
-输入客户名称
ABC
-输入状态(Active/Inactive)
活动的
输入2个客户详细信息
-输入客户名称
BCD
-输入状态(Active/Inactive)
活动的
输入3个客户详细信息
-输入客户名称
ABC
-输入状态(Active/Inactive)
活动的
-来自demo_table的记录
1|ABC|abc.in|Active|8081
2|BCD|bcd.in|Active|8082
邮箱: mahendranatarajan@amachu-Inspiron-3558:~$
发布于 2017-06-28 13:00:02
您的循环的问题在于查询"select cus_name from $table_name;"
。这是选择表中的所有cus_name并填充数组。在上面的示例中,当您在输入第二个客户之后再次提供第一个客户名称时,您的查询将获取以下结果
++ 'select cus_name from demo_table' + customer='ABC BCD'
这就是你的if条件失败的原因
+ [[ ABC != \A\B\C\\B\C\D ]]
要解决您的问题,请将您的查询更改为
"select cus_name from $table_name where cus_name like '$c_name';")
这将检查数据库中是否存在该客户,以及该客户是否存在,并将返回客户名称。如果ABC存在,那么它将返回ABC,您的if条件将正常工作。
https://stackoverflow.com/questions/44801144
复制相似问题