Bash脚本“命令未找到错误”

时间:2017-10-11 18:44:33

标签: bash

我正致力于编写一个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,它可以提供帮助。

2 个答案:

答案 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 ..."内容
  • 您需要实际获取ID,因为该功能目前尚未执行此操作。

其他功能也是如此。

这里有一些东西让你入门:

#!/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