Unix script error

Posted on 2013-05-21
Last Modified: 2013-05-23
I have a unix script (validint.bash) that continues to give the following error after I type the file name and following input...

   sh-3.2# bash validint.bash 123.45

Then I get this error message...

   : command not found 3:
   'alidint.bash: line 4: syntax error near unexpected token `{
   'alidint.bash: line 4: `function validint() {

I attached the script below in a text (.rtf) file. Please help. Thanks.
Question by:Tech_20
  • 2
  • 2
LVL 68

Assisted Solution

woolmilkporc earned 333 total points
ID: 39184487
Don't use spaces around "=" in variable assignments!

number="$1"; min="$2"; max="$3"´
nodigits="$(echo $testvalue | sed 's/[[:digit:]]//g')"

The space following "#" in the shebang line is also wrong:

LVL 34

Accepted Solution

Duncan Roe earned 167 total points
ID: 39186047
woolmilkporc is correct in identifying spaces that should be removed, but that is not your immediate problem.
You immediate problem is that your file has DOS-style line endings - did you prepare it using Notepad?
DOS (and Windows) text files end lines with Carriage-return Line-feed whereas under Linux or any Unix system, text files need to end to end lines with Newline (actually the same character as Line-feed but we call it Newline because of its different behavior).
I can reproduce your output by saving your file DOS-style, but on my system bash highlights that the problem is with Carriage-return(Cr)
08:02:04$ bash 123.45 line 3: $'\r': command not found line 4: syntax error near unexpected token `$'{\r''
' line 4: `function validint() {

Open in new window

Your system treated Cr as a regular character, hence the references to alidint.bash.
To fix your problem, convert your file with dos2unix or re-code it under Linux with vim or some other native editor.

Author Comment

ID: 39189224
Both of you have great points. I made the changes woolmilkporc suggested. I also transferred the code from Sublime2 to MacVim after experiencing similar errors and it worked. I had another script "validFloat2.bash" referencing the previous script named "validint2.bash" and it worked but I also received this error message.

sh-3.2# bash validFloat.bash 1234.56

validint2.bash: line 12: [: missing `]'
validint2.bash: line 19: [: missing `]'
validFloat.bash: line 32: [: fractionalPart: unary operator expected
1234.56 is a valid floating-point value

Any other suggestions.
LVL 68

Assisted Solution

woolmilkporc earned 333 total points
ID: 39189239
You're missing a  space in front of the closing square bracket here (first script):

if [ -z $number ] ; then
if [ "${number%${number#?}}" = "-" ] ; then

and here (second script):

if [ "fractionalPart" != "" ] ; then

and it seems that you still have carriage return characters at the line ends!

Author Closing Comment

ID: 39192587
Thanks. The comments on variable assignments, carriage returns and choice of code editor helped!

Featured Post

Windows Server 2016: All you need to know

Learn about Hyper-V features that increase functionality and usability of Microsoft Windows Server 2016. Also, throughout this eBook, you’ll find some basic PowerShell examples that will help you leverage the scripts in your environments!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

FreeBSD on EC2 FreeBSD ( is a robust Unix-like operating system that has been around for many years. FreeBSD is available on Amazon EC2 through Amazon Machine Images (AMIs) provided by FreeBSD developer and security office…
Active Directory replication delay is the cause to many problems.  Here is a super easy script to force Active Directory replication to all sites with by using an elevated PowerShell command prompt, and a tool to verify your changes.
Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…
Connecting to an Amazon Linux EC2 Instance from Windows Using PuTTY.

825 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question