你好!我是一名初学者,正在尝试学习 Bash 脚本。我想使用我的脚本读取用户输入(哈希值)。但是,当我运行脚本时,它只是挂起而不返回任何结果。这是我运行脚本的方式 ./md5.sh ab68ae97c98a18bda63312d263d6061c。谢谢。
#!/bin/bash
read hashinput
Getpath="$( find . -type f -exec md5sum {} + | grep "($hashinput)" )"
echo $Getpath
exit
答案1
使用此脚本,它会在您执行 ./md5.sh 后等待答复。
例如,您的代码意味着您执行以下操作:
./md5.sh
(md5_hash)
用于输入。
但是因为您正在执行./md5.sh (md5_hash)
,所以它对您的输入不执行任何操作(因为它不是正确的输入,它是一个脚本参数)。
您可以添加@davidgo 推荐的内容,但您也可以执行以下操作:
#!/bin/bash
echo "MD5 Sum/Hash:"
read hashinput
Getpath="$( find . -type f -exec md5sum {} + | grep "($hashinput)" )"
echo $Getpath
exit
像提示一样进行创建。
喜欢:
$ ./md5.sh
MD5 Sum/Hash: (md5_hash)
这就是我使用 shell 脚本制作提示的方法。
因此,本质上有两种可能:
- 你在输入
echo
之前创建一个文本提示read
- 您可以关注@davidgo 并添加代码来执行参数。
答案2
看来您的脚本需要不同的输入。根据 @KamilMaciorowski 的评论,您的脚本当前运行的方式需要从 STDIN 获取输入才能工作 - 因此您可以按如下方式运行脚本:
echo ab68ae97c98a18bda63312d263d6061c | ./md5.sh
它将把哈希 a...c 提供给标准输出,以供脚本解析。
如果您想按照示例用法将哈希作为命令行参数,可以尝试以下脚本:
#!/bin/bash
if [ -z "$1" ]
then
echo "Usage $0 hash"
exit
fi
Getpath=$( find . -type f -exec md5sum {} + | grep "$1" )
echo "$Getpath"
exit
上面的 $1 是提供给脚本的第一个参数。我不确定你为什么用双引号括住 Getpath 的右侧。