在文件中搜索用户名并输出用户的电话号码

sdf*_*dff 4 scripting

首先,我制作了一个名为电话的文件,其中包含:

Jan;032569874    
Annemie;014588529    
Hans;015253694    
Stefaan;011802367
Run Code Online (Sandbox Code Playgroud)

我现在需要做的是制作一个脚本,用户输入一个名字,输出应该是这样的,

The phone number of Jan is 032569874
Run Code Online (Sandbox Code Playgroud)

我尝试了很多东西,但没有像它应该做的那样工作。我知道这是一个非常容易的,但我就是无法得到它。

好吧,这些答案显然来自更高的层次。这是我得到的:

#!/bin/bash
#Solution script2

IFS=";"

echo "Whose phone number do you want to know?"
read name
read name number <$1
echo "The phone number of $name is $number."
Run Code Online (Sandbox Code Playgroud)

jas*_*yan 6

使用awk

#!/usr/bin/awk -f
BEGIN { FS=";" } $1 ~ name { print "The number of " name " is " $2 }
Run Code Online (Sandbox Code Playgroud)
phones -v name=Jan telephone                                      
The number of Jan is 032569874
Run Code Online (Sandbox Code Playgroud)


slm*_*slm 6

这是脚本的粗略修改版本:

$ more cmd.bash 
#!/bin/bash

echo "Whose phone number do you want to know?"
read name
number=$(grep "$name" telephone | cut -d';' -f2)
echo ''
echo "The phone number of $name is $number."
Run Code Online (Sandbox Code Playgroud)

它的工作原理如下:

$ ./cmd.bash 
Whose phone number do you want to know?
Hans

The phone number of Hans is 015253694.
Run Code Online (Sandbox Code Playgroud)

这个怎么运作

它只是通过read name命令接收名称并存储在变量中键入的内容,$name. 然后我们对文件进行 grep telephone,然后使用分号作为分隔符cut将文件中的结果行拆分telephone为 2 个字段。字段 2 的电话号码存储在变量 中$number

测试

您可以使用以下脚本来测试您的脚本是否有效,并使用文件telephone.

$ while read -r i ;do 
    echo "-----"
    echo "Test \"$i\""
    ./cmd.bash <<<$i
    echo "-----"
  done < <(cut -d';' -f1 telephone)
Run Code Online (Sandbox Code Playgroud)

上面的命令读入文件的内容,用telephone分号分割它;,然后从字段 1(然后是名称)中获取每个值并一次循环 1 个。然后每个名称都cmd.bash通过 STDIN传递给您的脚本,也就是。<<<$i. 这模拟了用户键入每个名称。

$ while read -r i ;do echo "-----"; echo "Test \"$i\""; \
    ./cmd.bash <<<$i; echo "-----"; done < <(cut -d';' -f1 telephone)
-----
Test "Jan"
Whose phone number do you want to know?

The phone number of Jan is 032569874.
-----
-----
Test "Annemie"
Whose phone number do you want to know?

The phone number of Annemie is 014588529.
-----
-----
Test "Hans"
Whose phone number do you want to know?

The phone number of Hans is 015253694.
-----
-----
Test "Stefaan"
Whose phone number do you want to know?

The phone number of Stefaan is 011802367.
-----
Run Code Online (Sandbox Code Playgroud)