Ubuntu bash functions..syntax error: "(" or "}" unexpected
If you are running the script with sh hello.sh
, the interpreting shell will not be the one mentioned in the shebang line, but /bin/sh
will be used. In case of Debian and Ubuntu by default this will be dash
.
So to run your script correctly with a bash
, use either of the following.
/bin/bash hello.sh
or
chmod +x hello.sh
./hello.sh
Alternatively you also could set bash
as the /bin/sh
.
dpkg-reconfigure dash
First:
The syntax error is because of (). Remove () from the file like this:
#!/bin/bash
function hello {
echo "Hello world"
}
or you can just run the following command to edit the file for you:
sed -i 's/() //g' hello.sh
You should now be able to run the file with the desired result.
Alternatively:
You could add lines 2, 3, and 4 to your ~/.bashrc
file.
function hello () {
echo "Hello world"
}
Remember, do not use sudo
to edit your ~/.bashrc
file!
After you add the lines to the file, run the following command to restart bash or "source" your .bashrc file:
. ~/.bashrc
You should now be able to run the comand hello
and "Hello world" should print in the terminal.
Also:
You could edit the file to say this instead:
#!/bin/bash
echo "Hello world"
and name the file hello
and save the file to /usr/local/bin
.
After doing all of that, make the file executable by running the following command:
sudo chmod +x /usr/local/bin/hello
You should now be able to run the comand hello
and "Hello world" should print in the terminal.
Finally:
A third option would be to add the following line to your ~/.bashrc
file:
alias hello='echo "Hello world"'
Then, source your .bashrc file using the following command:
. ~/.bashrc
GNU Bash is the shell used by default in terminals on Ubuntu. However when scripts are executed on system boot then dash is used, as it is dash that is /bin/sh.
Won't work-->
$ sh hello.sh
Will work -->
$./hello.sh
Problem solved