• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 676
  • Last Modified:

Unix script error

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.
  • 2
  • 2
3 Solutions
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:

Duncan RoeSoftware DeveloperCommented:
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 ee101.sh 123.45
ee101.sh: line 3: $'\r': command not found
ee101.sh: line 4: syntax error near unexpected token `$'{\r''
'e101.sh: 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.
Tech_20Author Commented:
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.
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!
Tech_20Author Commented:
Thanks. The comments on variable assignments, carriage returns and choice of code editor helped!

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now