收集数据,将其保存到文件中并在 bash 脚本中再次运行;

收集数据,将其保存到文件中并在 bash 脚本中再次运行;

我是 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

您没有指定错误的性质。寻求帮助时,您应该始终指定确切的错误消息。否则,就像您期望其他人为您完成所有调试一样。花一两秒钟提供最基本和最明显的信息,您可能会获得更多帮助。

尽管如此,还是有几点需要注意:

  1. 读取电话号码时,会有一个空格,这意味着您正在读取两个单独的变量。当您尝试将其放入文件时,您会用不同的名称调用该变量。

    echo "Type the phone number:"
    read phone number
    #...
    echo "Phone Number: $phonenumber" >> Datacollection.txt
    
  2. 方括号 ( []) 和其内容之间需要有空格。因此,此行是错误的:

    elif ["opt" = "Add another user"]; then
    
  3. 除了上述内容之外,还要小心比较的内容。 前面没有美元符号"opt",因此您比较的是文字字符串,而不是其值。
  4. 您的选项选择例程完全被破坏了。您需要将其丢弃并使用不同的方法重写。提示:用户输入的任何内容都将存储在您传递给的变量中read。您将测试该值,因此请仔细考虑用户需要输入的内容以及如何传达该内容。提示 2:输入help select以查看文档以了解解决此问题的好方法。

  5. 最后,一个真正有用的调试脚本的工具是set -x。将它放在脚本的顶部。然后,当 shell 解释脚本时,您将能够看到脚本中的所有内容。如果那里看起来有问题,则表示您发现了错误。

相关内容