Bash script to get total size off of remainder calculated


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Bash script to get total size off of remainder calculated
# 1  
Old 01-28-2019
Bash script to get total size off of remainder calculated

I am working on a script to get the final total size and so far have the following and wondering if this can be improved.

# Compare the desired size of each lvm to the standard size. If it is desired is larger than calculate the difference and keep that value as the amount to add to that LVM.
# If the desired size is smaller than the standard than set the amount to add as 0.

Code:
If VarSize > VarStandard Then
VarAdd = VarSize - VarStandard
Else
VarAdd = 0
End If
 
If OptSize > OptStandard Then
OptAdd = OptSize - OptStandard
Else
OptAdd = 0
End If
 
If HomeSize > HomeStandard Then
HomeAdd = HomeSize - HomeStandard
Else
HomeAdd = 0
End If
 
If TmpSize > VarStandard Then
TmpAdd = TmpSize - TmpStandard
Else
TmpAdd = 0
End If
 
 
# Add up the additional amount required for each LVM to get the total additional required space
TotalAdd = VarAdd + OptAdd + HomeAdd + TmpAdd

My script flow for this:

Code:
#!/bin/bash
"$1"=5
"$2"=3
"$3"=2
"$4"=2

VarStandard=4
OptStandard=2
HomeStandard=1
TmpStandard=1

if (( $( echo "$1 > $VarStandard" |bc))); then
    VarAdd=$( $1 % $VarStandard ) 
      fi
  if (( $( echo "$1 > $OptStandard" |bc))); then
    OptAdd=$( $2 % $OptStandard ) 
  fi
  if (( $( echo "$3 > $HomeStandard" |bc))); then
    HomeAdd=$( $3 % $HomeStandard ) 
  fi
  if (( $( echo "$4 > $TmpStandard" |bc))); then
    TmpAdd=$( $4 % $TmpStandard ) 
  fi
  
if [ $(( VarAdd + OptAdd + HomeAdd + TmpAdd )) -eq 0 ] ; then
   echo "No Space needed"
  else
   echo "$(( VarAdd + OptAdd + HomeAdd + TmpAdd )) extra space is needed"
   fi


Last edited by jim mcnamara; 01-29-2019 at 12:49 AM..
# 2  
Old 01-29-2019
Few simple modifications:


bash code:
  1. #!/bin/bash
  2.  
  3. VarSize=${1-5} # use $1 if defined, else set VarSize as 5
  4. OptSize=${2-3} # use $2 if defined, else set OptSize as 3
  5. HomeSize=${3-2} # use $3 if defined, else set HomeSize as 2
  6. TmpSize=${4-2} # use $4 if defined, else set TmpSize as 2
  7.  
  8. # Here you may have extra code to check if all the above variables are numbers and not something else.
  9. # Left as an exercise to the OP.
  10.  
  11. VarStandard=4
  12. OptStandard=2
  13. HomeStandard=1
  14. TmpStandard=1
  15.  
  16. if (( VarSize > VarStandard )); then # Why pipe it to bc when bash has provision to perform math
  17.     VarAdd=$(( VarSize - VarStandard ))
  18. fi
  19. if (( OptSize > OptStandard )); then
  20.     OptAdd=$(( OptSize - OptStandard ))
  21. fi
  22. if (( HomeSize > HomeStandard )); then
  23.     HomeAdd=$(( HomeSize - HomeStandard ))
  24. fi
  25. if (( TmpSize > TmpStandard )); then
  26.     TmpAdd=$(( TmpSize - TmpStandard ))
  27. fi
  28.  
  29. if (( $(( VarAdd + OptAdd + HomeAdd + TmpAdd )) == 0 )) ; then
  30.     echo "No Space needed"
  31. else
  32.     echo "$(( VarAdd + OptAdd + HomeAdd + TmpAdd )) extra space is needed"
  33. fi
These 2 Users Gave Thanks to balajesuri For This Post:
# 3  
Old 01-29-2019
Thanks for the response. This is one of the pieces for my final script which I am building. The script's intended use is ./scriptname arg 1 arg2 arg3 arg4 from the command line. The arguments will get passed to the default bash variables ( $1 $2 $3 $4 etc.) hence I was using them in my statements. The use of bc is to future proof it if numbers are not integers but floating numbers.
# 4  
Old 01-29-2019
It would have been very helpful if you had told us what errors you were getting, how you expected to invoke your script, and that you wanted to be able to perform floating point arithmetic up front instead of asking us to waste our time guessing at what you might be trying to do. Please don't assume that we can always figure out what you're trying to do by looking at code that won't work. Most of us don't have a crystal ball that works that well. Smilie

Have you considered using ksh instead of bash? A 1993 or later version of the Korn shell handles floating point values in addition to handling integers (although I'm not sure it will accept floating point values as the right hand operand in a mod operation). You haven't said anything about the range or precision of the numbers you expect to encounter. The bc utility can handle arbitrary precision (if you tell it what precision you want, which your bc scripts do not do) while ksh will limit you to double-precision floating point arithmetic.

Note also that if you have floating point values for any of your operands, you can't use bash arithmetic expansions to perform arithmetic (even after using bc to compare numbers). You'll get syntax error from bash if any of the operands in an arithmetic expansion aren't integers.

And, statements in your original code like:
Code:
    VarAdd=$( $1 % $VarStandard )

are not arithmetic expansions; they are command substitutions. That statement attempts to execute the utility named by whatever $1 expands to with the two operands % and 4 (which is what $VarStandard expands to in your sample script) and assign the output written to standard output by that utility to the shell variable named VarAdd. Arithmetic expansions are of the form:
Code:
$((expression))

(note the double parentheses instead of single parentheses).

If you really need arbitrary precision floating point arithmetic to perform all of these calculations, have you considered writing all of those calculations as a single bc script so you only have to invoke bc once instead of ten times?
# 5  
Old 01-29-2019
How about, then, making efficient use of bc and bash? Try
Code:
read VAdd OAdd HAdd TAdd <<< $(bc <<< "print $1 - $VarStandard, \" \", $2 - $OptStandard, \" \", $3 - $HomeStandard, \" \", $4 - $TmpStandard")
Delta="$(( (VAdd>0?VAdd:0) + (OAdd>0?OAdd:0) + (HAdd>0?HAdd:0) + (TAdd>0?TAdd:0) ))"
if  [ $Delta -eq 0 ]
  then  echo "No space needed"
  else  echo "$Delta extra space is needed"
fi


Last edited by RudiC; 01-29-2019 at 05:24 PM..
# 6  
Old 01-29-2019
Thanks to balajesuri, Don Cragun and RudiC for taking the time to respond to this thread.

Balajesuri - I will play further with the code and report back if any issues.
Don, I can only use Bash but I will go over your post and try to incorporate the suggestions.
RudiC, Thanks for the suggestion, I'll test it out.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Program or bash script to see total progress of copy

hi all, i want a program or to make a bash script to find out the total ETA/percent (would be nice aswell a progress bar) of a copy recursive command so lets say i do - cp -r /source_folder/ /destinatation_folder/ and when i run it i get no information on the screen of how the copy is... (20 Replies)
Discussion started by: robertkwild
20 Replies

2. Shell Programming and Scripting

Script to determine Date,TotalFile,total size of file based on date

I have file listed like below -rw-r--r--+ 1 test test 17M Nov 26 14:43 test1.gz -rw-r--r--+ 1 test test 0 Nov 26 14:44 test2.gz -rw-r--r--+ 1 test test 0 Nov 27 10:41 test3.gz -rw-r--r--+ 1 test test 244K Nov 27 10:41 test4.gz -rw-r--r--+ 1 test test 17M Nov 27 10:41 test5.gz I... (5 Replies)
Discussion started by: krish2014
5 Replies

3. Shell Programming and Scripting

Bash Script - File Size

I have a bash script. I need a modification for safety. my original bash script: mv /home/script/backup /home/script/backup2 mysql -u user -ppassword -Ddatabase --batch --skip-column-names -e 'select id, url from videos where url like "%http%" limit 1' | while read id url do youtube-dl... (1 Reply)
Discussion started by: tara123
1 Replies

4. Solaris

Need command to know the total size

:mad:i need command to know the total size of project in my system by Giga bit i try #du -s /*/projectname but i need total size for this project by G.B can you help me (6 Replies)
Discussion started by: ayman
6 Replies

5. Shell Programming and Scripting

bash script directory size

hello! i need to make a script that get a folder name in parameter and i get back the size of the folder include the subfolders! but i dont know how i need to start :S Example: a folder contain the followings a: drwxr-xr-x 2 user user 4096 febr 25 08.27 b -rw-r--r-- 1 user user 2 febr... (3 Replies)
Discussion started by: impish
3 Replies

6. Shell Programming and Scripting

total size

I have a directory that contains files like aaa-2010-05-30.txt ddd-2010-05-30.txt www-2010-05-30.txt i have total 2000 files, i need to calculate total size of files for *2010-05-30.txt like aaa-2010-05-30.txt 200MB ddd-2010-05-30.txt 10GB www-2010-05-30.txt 4GB Total 14.2 GB... (5 Replies)
Discussion started by: learnbash
5 Replies

7. Solaris

command to find out total size of a specific file size (spread over the server)

hi all, in my server there are some specific application files which are spread through out the server... these are spread in folders..sub-folders..chid folders... please help me, how can i find the total size of these specific files in the server... (3 Replies)
Discussion started by: abhinov
3 Replies

8. Shell Programming and Scripting

Remainder of x/y in shell script

Hi, Can anyone help me with the syntax for finding out remainder of two integers. Ex: 10/3 ... it should return 1. Is fmod function will be helpful here? I am not able to find out usage of it. Kindly help. Regards, Malay Maru (3 Replies)
Discussion started by: malaymaru
3 Replies

9. Shell Programming and Scripting

bash script working for small size files but not for big size files.

Hi, I have one file stat. Stat file contents are as follows: for example. H50768020040913,00260100,507680,13,0000000643,0000000643,00000,0000 H50769520040808,00260100,507695,13,0000000000,0000000000,00000,0000 H50770620040611,00260100,507706,13,0000000000,0000000000,00000,0000 Now i... (1 Reply)
Discussion started by: davidpreml
1 Replies

10. HP-UX

total size taken by directory

HI ALL, i am a beginner in unix world. can anyone please tell me the way to find total size taken by each directory (including size of all subdirectories and files) present under /var. e.g what is space occupied by /var/adm , /var/admin etc. its a simple question but still i dont know the... (2 Replies)
Discussion started by: jyoti
2 Replies
Login or Register to Ask a Question