WinPE
asked on
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.
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
there is no concept of data types in bash. Can you show the preceding code that assigns values to these variables?
ASKER
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
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
Add this line just before the comparison
echo $hd_size $part_size
if [ $hd_size -le $part_size ]; then
>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
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
ASKER
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??
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
Can you pls echo both the values and post the result here?
ASKER
both values echo as 15
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
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 :(
I was processing it backwards... I should of been doing -lt all this time... was looking at my whole stament backwards :(
declare -i var_name