我是 Bash 新手,编写了这个脚本来收集数据,然后将其保存到自动文件中。到目前为止,它运行良好,但当我尝试重新运行脚本以添加其他详细信息时,它给出了错误。
#!/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
您没有指定错误的性质。寻求帮助时,您应该始终指定确切的错误消息。否则,就像您期望其他人为您完成所有调试一样。花一两秒钟提供最基本和最明显的信息,您可能会获得更多帮助。
尽管如此,还是有几点需要注意:
读取电话号码时,会有一个空格,这意味着您正在读取两个单独的变量。当您尝试将其放入文件时,您会用不同的名称调用该变量。
echo "Type the phone number:" read phone number #... echo "Phone Number: $phonenumber" >> Datacollection.txt
方括号 (
[]
) 和其内容之间需要有空格。因此,此行是错误的:elif ["opt" = "Add another user"]; then
- 除了上述内容之外,还要小心比较的内容。 前面没有美元符号
"opt"
,因此您比较的是文字字符串,而不是其值。 您的选项选择例程完全被破坏了。您需要将其丢弃并使用不同的方法重写。提示:用户输入的任何内容都将存储在您传递给的变量中
read
。您将测试该值,因此请仔细考虑用户需要输入的内容以及如何传达该内容。提示 2:输入help select
以查看文档以了解解决此问题的好方法。最后,一个真正有用的调试脚本的工具是
set -x
。将它放在脚本的顶部。然后,当 shell 解释脚本时,您将能够看到脚本中的所有内容。如果那里看起来有问题,则表示您发现了错误。