The error message syntax error near unexpected token `(‘ occurs in a Unix-type environment, Cygwin, and in the command-line interface in Windows. This error will most probably be triggered when you try to run a shell script which was edited or created in older DOS/Windows or Mac systems.
This error message also surfaces when you are entering commands in the Linux command line for everyday tasks such as copying files manually etc. The main reasons why this error message occurs is either because of bad syntax or problem of the OS in interpreting another system’s commands/shell.
What causes Syntax Error near unexpected token `(‘?
The reasons for this error message are very diverse and cannot be listed in one article as there are thousands of possibilities of syntax going wrong when executing commands. The core reasons for this error are:
- Bad syntax when executing any command in either platform. Either you are not using the command correctly or have entered the wrong syntax.
- The shell is not compatible between Unix/DOS systems.
- There are issues running the bash shell script from another source.
In this article, we assume that you know the basics of coding and have an idea what you are doing. If you are a beginner, it is best that you follow in-depth tutorials of the language/command which you are trying to execute. You probably have made a mistake of some syntax.
Solution 1: Checking Syntax and Format of commands
The first and foremost reason why you might experience this error message is that of bad syntax in your code or you not following the exact format of the commands. Each command has a predefined format which you can see in its documentation. Several parameters are optional which others are mandatory.
Furthermore, extra care should be taken for extra space, use of double quotes, and the mandatory parameters required. If any of them are missing or have been declared incorrectly, you will not be able to execute your code.
For example, instead of the following code
[mycom7] # ./ctopo.sh um_test1 [(1,2),(2,1)]
You need to execute it as
[mycom7] # ./ctopo.sh um_test1 "[(1,2),(2,1)]"
Also, make sure that you are executing your commands/shell script correctly if it is spanning several lines.
Because of the parameter type, the double quotes are necessary. An extra space might also ruin your code and force the error message. Make sure that you check the official documentation of the command you are executing and see if there is a problem there.
Solution 2: Troubleshooting your shell script
If are using a shell script which works in the source system but returns an error in the target, you can troubleshoot the script by checking the variables which are stored during the execution and then see what is causing the issue. This is a very common cause as in several cases, the shell tries to interpret an unprintable character.
Try running the shell with the parameter of ‘vx’. This will show us what commands are being run and what values are stored in the script. Through here you can troubleshoot and diagnose what is going wrong.
For example, execute the script in the terminal after including ‘vx’ as:
# sh -vx ./test_script5.sh
You can check the contents of the script using the ‘cat’ command as:
# cat test_script5.sh
Solution 3: Using ‘dos2unix.exe’ command
In Windows/DOS text files, a new line is a combination of a Carriage Return (\r) followed by a Line Feed (\n). In Mac (before Mac OS X), a line break used a simple Carriage Return (\r). Unix/Linux and Mac OS X use Line Feed (\n) line breaks. If you are using Cygwin, it will fail to process the scripts made by DOS/Windows and older Mac because of the extra Carriage Return (\r) character.
Here you can make of ‘dos2unix.exe’ command which will convert the script to the correct format and then you can execute it without any issues.
To conclude, you need research your commands and type of platform you are using and make sure there are not any discrepancies. Since we cannot cover each and every possibility, you would have an idea what kinds of errors can occur and how to fix them.