我试图让 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"