这是我当前的代码,其想法是从文本文件中获取详细信息,用截断将其拆分,然后以可读的方式输出文本。
Patron.txt只有此行:
123456:Gerald:010-9999999:[email protected]
这个想法是为了制作一个带有4个部分的数组,每个零件单独读取,然后输入回声。
相反,终端只是显示一条空白。 我听说printf可以做到这一点,但我不知道如何至少在bash中用它来制作头或tail。
#!/bin/bash
echo "Search Patron Details"
echo -n "Enter Patron ID: "
read id1
grep -i -q "$id" patron.txt
array=$(echo $id | tr ":" "\n")
for fill in $array
do
$loop++
if [$loop == 0]
then
:
elif [$loop == 1]
then
echo "Fullname (auto display): $fill"
elif [$loop == 2]
then
echo "Contact Number (auto display): $fill"
elif [$loop == 3]
then
echo "Email Adddress (auto display): $fill"
else
while [$loop = true]
do
echo -n "Search another patron? (y)es or (q)uit"
read choice
case $choice in
y|Y) bash show_details;;
q|Q) exit;;
*) echo "Invalid input!"
esac
done
fi
done
echo "$id"
分析解答
您的代码有很多问题。
首先,您要提示赞助人ID并将其存储在id1
变量中,但是您永远不会在代码中的其他任何地方使用该变量。
其次,这无能为力:
grep -i -q "$id" patron.txt
即使您使用了正确的变量,此命令也有效地是no-op:它不会生成输出(由于-q
),即使它做到了,您也没有对其进行任何操作。您还忽略了退出代码。
这:
array=$(echo $id | tr ":" "\n")
同样没有用:即使您使用id1
变量,您也只是在呼应tr
的变量,而不使用patron.txt
文件的内容。
最后,您可能想使用mapfile
填充array
变量。
这样的事情:
#!/bin/bash
echo "Search Patron Details"
echo -n "Enter Patron ID: "
read id1
mapfile -d: -t array < <(grep -i "$id1" patron.txt)
echo "Fullname (auto display): ${array[1]}"
echo "Contact Number (auto display): ${array[2]}"
echo "Email Adddress (auto display): ${array[3]}"
在patron.txt
中的示例数据中,运行此操作看起来像:
Search Patron Details
Enter Patron ID: 123456
Fullname (auto display): Gerald
Contact Number (auto display): 010-9999999
Email Adddress (auto display): [email protected]