Solved

Unix script error

Posted on 2013-05-21
5
641 Views
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.
unix-script.rtf
0
Comment
Question by:Tech_20
  • 2
  • 2
5 Comments
 
LVL 68

Assisted Solution

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

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

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

#!/bin/sh
0
 
LVL 34

Accepted Solution

by:
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 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() {
08:02:06$ 

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.
0
 

Author Comment

by:Tech_20
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.

input
sh-3.2# bash validFloat.bash 1234.56

output
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.
validint2.rtf
validFloat2.rtf
0
 
LVL 68

Assisted Solution

by:woolmilkporc
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!
0
 

Author Closing Comment

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

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

Suggested Solutions

Title # Comments Views Activity
Guacamole cut and paste issue 3 48
Log File Creation with Header and Footer 17 60
Backup & Restore 3 47
Can't ping New Linux Servers 40 27
FreeBSD on EC2 FreeBSD (https://www.freebsd.org) 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…
Every server (virtual or physical) needs a console: and the console can be provided through hardware directly connected, software for remote connections, local connections, through a KVM, etc. This document explains the different types of consol…
Learn how to get help with Linux/Unix bash shell commands. Use help to read help documents for built in bash shell commands.: Use man to interface with the online reference manuals for shell commands.: Use man to search man pages for unknown command…
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.

895 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

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now