首先,我制作了一个名为电话的文件,其中包含:
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)
使用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)
这是脚本的粗略修改版本:
$ 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)
归档时间: |
|
查看次数: |
2132 次 |
最近记录: |