Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1242
  • Last Modified:

Bash Shell Script - Help with conditional evaluation of a variable integer

Hello, first off really new to bash, so not sure how this works.

Both of these values should be 15, but it always prooves false.

I believe $hd_size might be stored as a LONG (15.55)

how do can I change this expression to evaluate it as a whole number instead.






if [ $hd_size -le $part_size ]; then

Open in new window

0
WinPE
Asked:
WinPE
  • 5
  • 4
1 Solution
 
Ara-Commented:
You could try to print them to see the value. You can typecast a variable like this:
declare -i var_name
0
 
sunnycoderCommented:
there is no concept of data types in bash. Can you show the preceding code that assigns values to these variables?
0
 
WinPEAuthor Commented:
Sure: =)

hd_size="$(sfdisk -s /dev/$chosen_hd)"
cylinders="$(sfdisk -g /dev/$chosen_hd | awk '{ print $2; }')"
hd_size_convert="$(echo "scale=0; $hd_size / 1048576" | bc -l)"
 
 vol_size_tmp="$(mktemp /tmp/vol_size_tmp.XXXXXX)"
  trap "[ -f "$vol_size_tmp" ] && rm -f $vol_size_tmp" HUP INT QUIT TERM EXIT
  while [ "$ASK_VOL_SIZE" -ne 0 ]; do
    $DIA --backtitle "$msg_nchc_free_software_labs" --title  \
    "Partition Size" --inputbox "Please enter the primary partition size in gigabytes:" \
    0 0 $hd_size_convert\
    2> $vol_size_tmp
	nfs_srv="$(cat $vol_size_tmp)"
    if [ -n "$(cat $vol_size_tmp | grep -iE "[^[:digit:]]")" ] || [ -z "$nfs_srv" ] || [ $hd_size_convert -le $nfs_srv ]; then
      ASK_VOL_SIZE=1
      $DIA --backtitle "$msg_nchc_free_software_labs" --title "$msg_nchc_clonezilla" \
      --msgbox "$msg_enter_digits_only\n$msg_please_do_it_again!!!" 0 0 
    else
      ASK_VOL_SIZE=0
    fi
  done

Open in new window

0
Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

 
sunnycoderCommented:
okay .. I see hd_size getting assigned but I dont see part_size ...

Add this line just before the comparison        
echo $hd_size  $part_size

if [ $hd_size -le $part_size ]; then
0
 
sunnycoderCommented:
>I believe $hd_size might be stored as a LONG (15.55)
Umm .. did you mean that $hd_size is 15.55 and _part_size is 15? If yes and you wish to compare only the part before decimal place then use

$hd_size_new=`echo $hd_size|sed 's:\..*::'`
if [ $hd_size_new -le $part_size ]; then

If you wish to strip off the decimal part from part_size then use a similar line
$hd_part_new=`echo $part_size|sed 's:\..*::'`
if [ $hd_size_new -le $part_size_new ]; then

If however both are numbers with decimal points, e.g. 15.55, and you wish to compare them in entirety then compare them as strings
if [ "$hd_size" = "$part_size" ]; then
0
 
WinPEAuthor Commented:
I tried the following but same problem.

sorry I meant $hd_size_convert not $part_size

I can enter
14 and the line will proove true.
but if I enter 15 it prooves false for some reason.

$hd_size_convert echos as 15 in my test case so it should work right??
  if [ -n "$(cat $vol_size_tmp | grep -iE "[^[:digit:]]")" ] || [ -z "$nfs_srv" ] || [ "$hd_size_convert" -le "$nfs_srv" ]; then

Open in new window

0
 
sunnycoderCommented:
Can you pls echo both the values and post the result here?
0
 
WinPEAuthor Commented:
both values echo as 15
0
 
sunnycoderCommented:
Then -le should return true. Since you echo'ed the values just before comparison and the test condition is a bunch of conditions ORed together, the expression would evaluate to true. How did you determine it was evaluating to false?
0
 
WinPEAuthor Commented:
I'm an idiot... you cleared it out...

I was processing it backwards... I should of been doing -lt all this time... was looking at my whole stament backwards :(

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Get your problem seen by more experts

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

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