这是我当前的代码,其想法是从文本文件中获取详细信息,用截断将其拆分,然后以可读的方式输出文本。

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]