Understanding a script for sum

 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Understanding a script for sum
# 1  
Old 04-08-2018
Understanding a script for sum

Hello,

How come the following script adds each numeric value to a total sum ?

Code:
x=$1 
func() 
{ 
for i in $1 $2 $3; do 
let x= $x+$i 
done } 

func "8 8 8" 9 9 

echo $x

A.How the program sums the string "8 8 8" if it`s only the first field value ($1)?
B.If we define x to be $1 (x=$1) then we wouldn't be doing "8 8 8" + "8 8 8" on the first iteration ?
# 2  
Old 04-08-2018
That obviously is a (bourne) shell function. As you don't mention your shell's version, bash assumed.

man bash:
Quote:
for name [ [ in [ word ... ] ] ; ] do list ; done
The list of words following in is expanded, generating a list of items.
During expansion, the "multiword character" of $1 is lost, and the shell makes up this five item list: 8 8 8 9 9 across which the for loop iterates, resulting in 42 plus x's initial value. Be aware that the x=$1 assignment has nothing to do with the $1 that func() is called with; function get their own set of parameters when called.
And, remove the space in the let assignment.
This User Gave Thanks to RudiC For This Post:
# 3  
Old 04-08-2018
Quote:
Originally Posted by RudiC
That obviously is a (bourne) shell function. As you don't mention your shell's version, bash assumed.

man bashSmilieuring expansion, the "multiword character" of $1 is lost, and the shell makes up this five item list: 8 8 8 9 9 across which the for loop iterates, resulting in 42 plus x's initial value. Be aware that the x=$1 assignment has nothing to do with the $1 that func() is called with; function get their own set of parameters when called.
And, remove the space in the let assignment.
Thank you, so the x=$1 assignment doesn't serve any noticeable purpose in this script ?

B.In truth, the for loop doesn't iterates just three times for $1 $2 $3 as defined but rather one time for each existed item,total of five iterations in this case ?
# 4  
Old 04-08-2018
Like RudiC mentioned, x=$1 Assigns the value of the first parameter with which the script is called to variable x
After this there are 5 iterations that add a number to variable x
So in the end variable x will contain the sum of 6 numbers.

So if you call the script like this:
Code:
./script 1

Then the outcome is 43
Code:
./script 2

renders 44

--
Also:
let is an old, non-standard way of doing this. It is better to use portable shell arithmetic. So instead of
Code:
let x=$x+$i

use
Code:
x=$((x+i))



--
In bash/ksh/zsh you can also use:
Code:
(( x+=i ))


Last edited by Scrutinizer; 04-08-2018 at 01:25 PM..
This User Gave Thanks to Scrutinizer For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Shall script use and understanding

Below script is called as Reducer, I am not sure how it work, can some expert explain me what this script does as i am a beginner. inputfile: hi hi how are are you code: #!/bin/bash lastkey=""; -- what does this mean, because i saw in debug mode it is taking value as hi count=0;... (13 Replies)
Discussion started by: mirwasim
13 Replies

2. Shell Programming and Scripting

Help understanding the script

Could someone please help me in understanding the code below: #!/usr/bin/ksh Month=`date|cut -c5-7` Day=`date|cut -c9-10` Year=`date|cut -c27-28` Rom2Jul() { case $Month in Feb) Day=$(( $Day+31 ));; Mar) Day=$((... (27 Replies)
Discussion started by: hasn318
27 Replies

3. Shell Programming and Scripting

Help--understanding the script

Hi, New to this forum, as well as to unix scripting..need help to understand below script ... sendNotice_sp() { ATTACH=${LNXLOG:-} if ; then if ; then mail -s "$ERR_MSG" $ERR_EMAIL_TO < $ATTACH fi else mail -s "$ERR_MSG" $ERR_EMAIL_TO < /dev/null fi } afaik this is sm kind of... (6 Replies)
Discussion started by: gnnsprapa
6 Replies

4. Shell Programming and Scripting

Shell script to find the sum of argument passed to the script

I want to make a script which takes the number of argument, add those argument and gives output to the user, but I am not getting through... Script that i am using is below : #!/bin/bash sum=0 for i in $@ do sum=$sum+$1 echo $sum shift done I am executing the script as... (3 Replies)
Discussion started by: mukulverma2408
3 Replies

5. Shell Programming and Scripting

Help understanding the script

Hi Guys, I am new to scripting , I am trying to rebuild a script based on an old script. Can someone help me figure out what the script is doing? This is only a part of the script. I am looking to interpret these two points in the scripts:- 1) test=`echo $?` while I do not... (3 Replies)
Discussion started by: rajsan
3 Replies

6. UNIX for Dummies Questions & Answers

help with understanding script

i am trying to understand this script example. the text does not explain it. can someone tell me briefly what each of the functions do. any help will be appreciated. #!/bin/bash killtree() { local _pid=$1 local _sig=${2-TERM} for _child in $(ps -o pid --no-headers --ppid... (1 Reply)
Discussion started by: iluvsushi
1 Replies

7. Shell Programming and Scripting

Need help understanding this script.

Can someone explain what is happening line by line in this script, particularly after the do statement. The script works, it renames all the files in my directory that has a date in the file name. But I would like to know more about it. #!/bin/bash newdate=12-10-1995 for file in *--* do ... (6 Replies)
Discussion started by: Harleyrci
6 Replies

8. Shell Programming and Scripting

Need help for understanding of script

# sub: find block (in cols), return line-numbers (begin-end) or 0 if notfound sub findb{ my ($exp1,$col1,$exp2,$col2)= @_; # $exp = expression to find, $col - column to search in my $cnt=0; my ($val1,$val2); my ($beg,$end); for($cnt=1;$cnt<=65536;$cnt++){ $val1 =... (3 Replies)
Discussion started by: suvenduperl
3 Replies

9. Shell Programming and Scripting

Help understanding a script

Hello everybody, Can anybody tell me of what "~" refers to in the below code snippet. lsvg $vgNAME | awk 'BEGIN {freeDISK=1} {if (($4 ~ /PP/ && $5 ~ /SIZE/) || ($4 ~ /FREE/ && $5 ~ /PPs/)) {freeDISK *= $6 }} END {print freeDISK*1024 }' Thanks in advance, (6 Replies)
Discussion started by: tenderfoot
6 Replies

10. UNIX for Dummies Questions & Answers

Need help understanding script command

We use a UNIX-based system (Lawson) at work and I was given this command to request a data extract from the db admin. The only thing I really understand is the last line as it appears to be joining the files created from the first three lines into one. Is there anyone who can help me breakdown the... (4 Replies)
Discussion started by: KGee
4 Replies
Login or Register to Ask a Question