• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1241
  • 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
[Webinar] Improve your customer journey

A positive customer journey is important in attracting and retaining business. To improve this experience, you can use Google Maps APIs to increase checkout conversions, boost user engagement, and optimize order fulfillment. Learn how in this webinar presented by Dito.

 
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

Featured Post

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.

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