我正致力于编写一个bash脚本,以便为此目的下载imgur专辑或学习bash。到目前为止我写了这么多但是当我运行它时我得到了这个输出:
Enter the URL of the imgur album you would like to download: imgur.com
./imgur_dl.sh: line 25: Validating: command not found
./imgur_dl.sh: line 26: Getting: command not found
./imgur_dl.sh: line 30: imgur.com: command not found
到目前为止,这是我的代码。
#!/bin/bash
url=""
id=""
get_id(){
echo "Getting Album ID..."
local url=$1
echo $url
echo "Successflly got Album ID..."
return
}
validate_input(){
echo "Validating Input..."
local id=$1
echo $id
echo "Input Validated Successfully..."
return
}
get_input(){
read -p "Enter the URL of the imgur album you would like to download: " url
echo $url
$(validate_input url)
$(get_id url)
return
}
$(get_input)
我做错了什么或者我没有得到什么? 我正在开发macOS,它可以提供帮助。
答案 0 :(得分:2)
直接调用函数,例如:
valide_input $url
等等。
#!/bin/bash
url=""
id=""
get_id ()
{
echo "Getting Album ID..."
local url=$1
echo $url
echo "Successflly got Album ID..."
return
}
validate_input ()
{
echo "Validating Input..."
local id=$1
echo $id
echo "Input Validated Successfully..."
return
}
get_input ()
{
read -p "Enter the URL of the imgur album you would like to d ownload: " url
echo $url
validate_input $url
get_id $url
return
}
get_input
另外,正如其他人建议的那样,你可以通过将$ url放在双引号内来改善这一点,例如
validate_input "$url"
所以它处理其他无效的网址。
答案 1 :(得分:2)
此语法表示执行get_id url
的输出作为shell命令:
$(get_id url)
在当前实现中,get_id url
的输出是:
Getting Album ID...
url
Successflly got Album ID...
这将作为shell命令执行, 产生错误消息:
./imgur_dl.sh: line 26: Getting: command not found
因为确实没有这样的shell命令" Getting"。
我想你想做这样的事情:
local id=$(get_id "$url")
其中get_id
是一个函数,它接受一个URL并使用该URL获取一些id,然后echo
该id。
该函数应如下所示:
get_id() {
local url=$1
local id=...
echo id
}
那是:
echo
语句,例如echo "Getting ..."
内容其他功能也是如此。
这里有一些东西让你入门:
#!/bin/bash
is_valid_url() {
local url=$1
# TODO
}
input_url() {
local url
while true; do
read -p "Enter the URL of the imgur album you would like to download: " url
if is_valid_url "$url"; then
echo "$url"
return
fi
echo "Not a valid url!" >&2
done
}
download() {
local url=$1
echo "will download $url ..."
# TODO
}
main() {
url=$(input_url)
download "$url"
}
main