Sponsored Content
Top Forums Shell Programming and Scripting Syntax error in subtraction in Bash Post 303040006 by wisecracker on Monday 21st of October 2019 01:35:04 PM
Old 10-21-2019
I am assuming you are using bash or perhaps a POSIX shell like dash.
Your error is telling you that it is not possible to do such a task as these shells have INTEGER arithmetic only.

If you need floating/fixed point arithmetic then you will have to do workarounds using, bc, dc, python, perl, awk or any other methods that are capable of such mechanisms.

(Just an observation, you have both, ${barr1[$i]} and also ${harr1[j]} are these correct?)

EDIT:
Note the second one should have ${harr1[$j]}

An example longhand using INTEGER arithmetic and FIXED point, OSX 10.14.6, default bash terminal:
Code:
Last login: Mon Oct 21 18:25:40 on ttys000
AMIGA:amiga~> x=.098765
AMIGA:amiga~> y=10.3
AMIGA:amiga~> x=$( printf "%.f" ${x}e+12 )
AMIGA:amiga~> y=$( printf "%.f" ${y}e+12 )
AMIGA:amiga~> printf "%.12f\n" $(( y - x ))e-12
10.201235000000
AMIGA:amiga~> _


Last edited by wisecracker; 10-21-2019 at 02:50 PM.. Reason: See EDIT:
These 3 Users Gave Thanks to wisecracker For This Post:
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

BASH Script syntax error

I'm trying to write a simple script that takes all the .tar.gz files in a directory and verifies them by using the gzip -tv command: for zip in *.tar.gz do gzip -tv $zip if ; then #Check return code from tar echo "File ${zip} verified OK." exit... (4 Replies)
Discussion started by: kelldan
4 Replies

2. Shell Programming and Scripting

subtraction in bash arrays

hi i am using bash shell to perform some subraction. here is what i have: i have a while loop and am using i as a counter. diff= `expr ${ARRAY1} - ${ARRAY2}` for example array1 has -0.7145 and array2 has -0.7041. when i try the above command, i get expr: non-numeric argument. any... (6 Replies)
Discussion started by: npatwardhan
6 Replies

3. Shell Programming and Scripting

bash syntax error: command not found

I am trying to create a shell that asks the user to enter their name, and compare it to my own by saying we have the same name or saying my name and that they have a nice name too. Here is my script... #!/bin/bash-x echo "Enter your name". read name if then echo "My name is Adam too"... (1 Reply)
Discussion started by: amaxey45
1 Replies

4. Shell Programming and Scripting

Bash syntax error

while read line do mkdir $line scp -r Docking_results/docking_$line.pdb $line/ cd /$line/ set a=`grep ENDMDL docking_'$line'.pdb | wc -l` set b=`expr $a - 2` csplit -k -s -n 3 -f docking_'$line'. docking'$line'.pdb '/^ENDMDL/+1' '{'$b'}' foreach f (... (4 Replies)
Discussion started by: chrisjorg
4 Replies

5. Shell Programming and Scripting

Trying to pass a password: bash: syntax error near unexpected token `('

howdy, so I'm make a plugin work for Nagios, and the commandline is: /usr/lib/nagios/plugins/check_mssql -H MySQLServerName -u MySqlAccountName -p MyPassword(#XXXXX -d MyDatabaseName it is barfing with: bash: syntax error near unexpected token `(' Thoughts? Do I have to wrap something... (2 Replies)
Discussion started by: rgouette
2 Replies

6. Shell Programming and Scripting

-bash: syntax error near unexpected token `('

// AIX 6.1 I am getting a syntax error below. Please advise what to be corrected. :confused: runmqsc CERN.$(echo `hostname` | cut -d'.' -f1 | tr '' '').$(echo $environment | tr '' '') <<! | egrep -i '(FROM.NC.APPLIANCE)' | sort -u |awk '{print $2}' | cut -d '(' -f2 | cut -d ')' -f1 |... (1 Reply)
Discussion started by: Daniel Gate
1 Replies

7. Shell Programming and Scripting

Basic Bash algorithm with sum/subtraction

Hi all, i'm making some test on a data file. Imagine i have two columns inside it : 80377,20 80377,20 80379,19 80378,20 80380,20 80382,20 80381,21 Just to understand how can it works, imagine to subtract 100 to the number in the first column when the other one in the second... (4 Replies)
Discussion started by: Board27
4 Replies

8. Shell Programming and Scripting

Bash function using variable in it syntax error

The below bash function uses multiple variables CODING, SAMPLE, SURVEY, andvariant in it. The user selects the cap function and details are displayed on the screen using the $SURVEY variable, the directory is changed to $SAMPLE and the samples.txt is opened so the user can select the sample to... (6 Replies)
Discussion started by: cmccabe
6 Replies

9. Shell Programming and Scripting

Bash calling a few functions syntax error

In the bash function below if the user selets "y" then the menu function is called and if they select "n" the move function is called. That all seems to work, my question is after the files are moved an echo, line in bold is displayed and another function called backup is called. I am getting a... (1 Reply)
Discussion started by: cmccabe
1 Replies

10. BSD

Keep getting error "-bash: ./.profile_z2: line 52: syntax error: unexpected end of file"

#!/bin/bash #-------------------------------------------------------- # Setup prompt # Author Zeeshan Mirza # Data: 06-08-2017 #-------------------------------------------------------- if then . ./.profile_custom_pre fi umask 022 set -o vi export EDITOR=vi export VISUAL=vi... (3 Replies)
Discussion started by: getzeeshan
3 Replies
IOCTL(9)						   BSD Kernel Developer's Manual						  IOCTL(9)

NAME
ioctl -- how to implement a new ioctl call to access device drivers SYNOPSIS
#include <sys/ioctl.h> #include <sys/ioccom.h> int ioctl(int, unsigned long, ...); DESCRIPTION
ioctl are internally defined as #define FOOIOCTL fun(t,n,pt) where the different variables and functions are: FOOIOCTL the name which will later be given in the ioctl(2) system call as second argument, e.g., ioctl(s, FOOIOCTL, ...). fun() a macro which can be one of _IO the call is a simple message to the kernel by itself. It does not copy anything into the kernel, nor does it want anything back. _IOR the call only reads parameters from the kernel and does not pass any to it _IOW the call only writes parameters to the kernel, but does not want anything back _IOWR the call writes data to the kernel and wants information back. t This integer describes to which subsystem the ioctl applies. t can be one of '1' pulse-per-second interface '4' isdn(4) 'a' ISO networking 'A' ac devices (hp300) 'A' Advanced Power Management (hpcmips, i386, sparc), see apm(4) 'A' ADB devices (mac68k, macppc) 'A' audio(4) 'A' isdntel(4) 'b' tb(4) 'b' Bluetooth HCI sockets, see bluetooth(4) 'b' Bluetooth Hub Control, see bthub(4) 'b' Bluetooth SCO audio driver, see btsco(4) 'B' bell device (x68k) 'B' bpf(4) 'c' coda 'c' cd(4) 'c' ch(4) 'C' clock devices (amiga, atari, hp300, x68k) 'C' isdnctl(4) 'd' the disk subsystem 'E' envsys(4) 'f' files 'F' Sun-compatible framebuffers 'F' ccd(4) and vnd(4) 'g' qdss framebuffers 'G' grf devices (amiga, atari, hp300, mac68k, x68k) 'h' HIL devices (hp300) 'H' HIL devices (hp300) 'H' HPc framebuffers 'i' a (pseudo) interface 'I' ite(4) (mac68k) 'J' ISA joystick interface 'k' Sun-compatible (and other) keyboards 'l' leo devices (atari) 'm' mtio(4) 'M' mouse devices (atari) 'M' mlx(4) 'n' virtual console device (arm32) 'n' SMB networking 'O' OpenPROM and OpenFirmware 'p' power control (x68k) 'P' parallel port (amiga, x68k) 'P' profiling (arm32) 'P' printer/plotter interface (hp300) 'P' pci(4) 'P' compat/ossaudio and soundcard.h 'P' magma(4) bpp (sparc) 'q' altq(9) 'q' pmax graphics devices 'Q' altq(9) 'Q' raw SCSI commands 'r' the routing subsystem 'r' md(4) 'R' isdnbchan(4) 'R' rnd(4) 's' the socket layer 's' satlink devices 'S' SCSI disks (arc, hp300, pmax) 'S' watchdog devices (sh3) 'S' ISA speaker devices 'S' stic devices 'S' scanners 't' the tty layer 'u' user defined ??? 'U' scsibus (see scsi(4)) 'v' Sun-compatible ``firm events'' 'V' view device (amiga, atari) 'V' sram device (x68k) 'w' watchdog devices 'W' wt devices 'W' wscons devices 'x' bt8xx devices 'Z' ite devices (amiga, atari, x68k) 'Z' passthrough ioctls n This numbers the ioctl within the group. There may be only one n for a given t. This is an unsigned 8 bit number. pt This specifies the type of the passed parameter. This one gets internally transformed to the size of the parameter, so for exam- ple, if you want to pass a structure, then you have to specify that structure and not a pointer to it or sizeof(struct foo) In order for the new ioctl to be known to the system it is installed in either <sys/ioctl.h> or one of the files that are reached from <sys/ioctl.h>. RETURN VALUES
All ioctl() routines should return either 0 or a defined error code. The use of magic numbers such as -1, to indicate that a given ioctl code was not handled is strongly discouraged. The value -1 coincides with the historic value for ERESTART which was shown to produce user space code that never returned from a call to ioctl(2). For ioctl codes that are not handled by a given routine, the pseudo error value EPASSTHROUGH is provided. EPASSTHROUGH indicates that no error occurred during processing (it did not fail), but neither was anything processed (it did not succeed). This supersedes the use of either ENOTTY (which is an explicit failure) or -1 (which has no contextual meaning) as a return value. ENOTTY will get passed directly back to user space and bypass any further processing by other ioctl layers. Only code that wishes to suppress possible further processing of an ioctl code (e.g., the tty line discipline code) should return ENOTTY. All other code should return EPASSTHROUGH, even if it knows that no other layers will be called upon. If the value EPASSTHROUGH is returned to sys_ioctl(), then it will there be changed to ENOTTY to be returned to user space, thereby providing the proper error notification to the application. EXAMPLES
#define FOOIOCTL _IOWR('i', 23, int) int a = 3; error = ioctl(s, FOOICTL, &a); Within the ioctl()-routine of the driver, it can be then accessed like driver_ioctl(..., u_long cmd, void *data) { ... switch (cmd) { case FOOIOCTL: int *a = (int *)data; printf(" Value passed: %d ", *a); break; } } NOTES
Note that if you for example try to read information from an ethernet driver where the name of the card is included in the third argument (e.g., ioctl(s, READFROMETH, struct ifreq *)), then you have to use the _IOWR() form not the _IOR(), as passing the name of the card to the kernel already consists of writing data. SEE ALSO
ioctl(2) BSD
December 11, 2010 BSD
All times are GMT -4. The time now is 11:46 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy