7

Trying to do a script to download a file using wget, or curl if wget doesn't exist in Linux. How do I have the script check for existence of wget?

John Williams
  • 10,960
  • 4
  • 35
  • 47

6 Answers6

11

Linux has a which command which will check for the existence of an executable on your path:

pax> which ls ; echo $?
/bin/ls
0

pax> which no_such_executable ; echo $?
1

As you can see, it sets the return code $? to easily tell if the executable was found, so you could use something like:

if which wget >/dev/null ; then
    echo "Downloading via wget."
    wget --option argument
elif which curl >/dev/null ; then
    echo "Downloading via curl."
    curl --option argument
else
    echo "Cannot download, neither wget nor curl is available."
fi
paxdiablo
  • 814,905
  • 225
  • 1,535
  • 1,899
8
wget http://download/url/file 2>/dev/null || curl -O  http://download/url/file
Suku
  • 3,722
  • 1
  • 20
  • 23
  • 1
    Note that for this answer, if the user has both wget and curl installed, then this will also run curl if wget fails (for example, the file 404'd.) – alexyorke Mar 13 '21 at 04:48
5

One can also use command or type or hash to check if wget/curl exists or not. Another thread here - "Check if a program exists from a Bash script" answers very nicely what to use in a bash script to check if a program exists.

I would do this -

if [ ! -x /usr/bin/wget ] ; then
    # some extra check if wget is not installed at the usual place                                                                           
    command -v wget >/dev/null 2>&1 || { echo >&2 "Please install wget or set it in your path. Aborting."; exit 1; }
fi
Community
  • 1
  • 1
Satabdi
  • 582
  • 1
  • 4
  • 8
  • good solution, thanks for linking to the other thread about `command` as well, helpful info, thank you! – kjones Apr 07 '19 at 03:37
2

First thing to do is try install to install wget with your usual package management system,. It should tell you if already installed;

yum -y wget

Otherwise just launch a command like below

wget http://download/url/file 

If you receive no error, then its ok.

J. Chomel
  • 7,889
  • 15
  • 41
  • 65
Sunil Shakya
  • 5,796
  • 2
  • 13
  • 19
1

A solution taken from the K3S install script (https://raw.githubusercontent.com/rancher/k3s/master/install.sh)

function download {
    url=$1
    filename=$2

    if [ -x "$(which wget)" ] ; then
        wget -q $url -O $2
    elif [ -x "$(which curl)" ]; then
        curl -o $2 -sfL $url
    else
        echo "Could not find curl or wget, please install one." >&2
    fi
}
# to use in the script:
download https://url /local/path/to/download

Explanation: It looks for the location of wget and checks for a file to exist there, if so, it does a script-friendly (i.e. quiet) download. If wget isn't found, it tries curl in a similarly script-friendly way.

(Note that the question doesn't specify BASH however my answer assumes it.)

jla
  • 3,111
  • 3
  • 27
  • 39
deviate
  • 11
  • 1
-1

Simply run

wget http://download/url/file 

you will see the statistics whether the endpoint is available or not.

Jude Niroshan
  • 4,081
  • 7
  • 39
  • 58