用户在 Linux bash 中输入以检查列表并响应结果

用户在 Linux bash 中输入以检查列表并响应结果

我试图让 bash 要求用户输入 read 并检查文件或文件列表,然后用该检查的结果进行响应。这是迄今为止我所得到的......

read -p "what are we looking for?" RESP
if [ "$RESP" = sed -n ${some line from inside file} ./file | 
then do "returned variable from file"

else
echo "You need more bash programming" 

我知道我在这里很新,但我无法弄清楚,无论响应是什么,都需要根据文件(文件内的内容)进行检查 - 逐行然后返回该行的关联变量

说喜欢

"RESP"=line 3(or any line that matches) of ./this_file 
return "var1" of that line
Do "var1"

fi

这是执行此操作的方法吗?这段代码在简单的 bash 中会是什么样子我很迷茫,请帮忙

例子:

line1:"请打开 google" "var1[打开 http:www.google.com]

将“var1”传递给 bash

答案1

对于文件,我建议采用如下格式:

please open google|open http:www.google.com

这里的响应是竖线之前的所有内容。你的var1就是竖线之后的所有内容。 (如果您要在该行上放置更多变量,请用更多竖线将它们分开。)

至于脚本,这是一个开始:

#!/bin/sh
read -p "what are we looking for? " response
action="$(awk -F\| -v r="$response" '$1==r{print $2;exit}' file)"
eval "$action"

读取命令获取输入。 (最佳实践是对 shell 变量使用小写,这样就不会意外覆盖重要的内容。)

with 行awk从文件中以 开头的第一行中提取操作response|。它假定第一个竖线之后的所有内容都是您的命令。

上面的最后一行执行action。它通过 来执行此操作eval。使用eval需要一定程度的信任。当您完善设计时,您应该消除使用eval.

使用不同的字段分隔符

如果我们使用@of|代替字段分隔符,那么file将会有如下行:

please open google@open http:www.google.com

该代码需要进行一次更改:

read -p "what are we looking for? " response
action="$(awk -F@ -v r="$response" '$1==r{print $2;exit}' file)"
eval "$action"

相关内容