need help in fixing below script

Hi All

I want to incraese swap as per ram size so created one script.

but it gives some error - please help me to fix it.

#!/bin/sh

oram=/usr/bin/free -g | grep Mem | awk '{print $2}'
swap.sh: line 3: -g: command not found
oswap=/usr/bin/free -g | grep Swap | awk '{print $2}'
swap.sh: line 4: -g: command not found

if [ "$oram" < 2 ]
then
swapsize=$oram*1.5
elif [ "$oram" >= 2 && "$oram" <= 16  ]
then
swapsize=$oram
if [ "$oram" > 16 ]
then
swapsize=16
fi

# does the swap file already exist?
grep -q "swapfile" /etc/fstab

# if not then create it
if [ $? -ne 0 ]; then
        echo 'swapfile not found. Adding swapfile.'
        fallocate -l ${swapsize}G /swapfile
        chmod 600 /swapfile
        mkswap /swapfile
        swapon /swapfile
        echo '/swapfile none swap defaults 0 0' >> /etc/fstab
else
        echo 'swapfile found. No changes made.'
fi

# output results to terminal
cat /proc/swaps
cat /proc/meminfo | grep Swap

Open in new window

The RockAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

andreasSystem AdminCommented:
change

oram=/usr/bin/free -g | grep Mem | awk '{print $2}'

into

oram=$(/usr/bin/free -g | grep Mem | awk '{print $2}') and it should work

Same mod with the oswap line.
0
Gerwin Jansen, EE MVETopic Advisor Commented:
You are comparing numbers, instead of using < and > use -lt, -le, -gt etc. instead.
0
The RockAuthor Commented:
Thanks but now if statement not working

oram=$(/usr/bin/free -g | grep Mem | awk '{print $2}')
oswap=$(/usr/bin/free -g | grep Swap | awk '{print $2}')
echo "Current Ram = $oram "
echo "Current Swap = $oswap "
if [ "$oram" < 2 ]
then
swapsize=($oram*1.5)
echo "$swapsize"
elif [ "$oram" >= 2 && "$oram" <= 16  ]
then
swapsize=$oram
echo "$swapsize"
elif [ "$oram" > 16 ]
then
swapsize=16
echo "$swapsize"
fi
0
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

andreasSystem AdminCommented:
see comment from Gerwin above you need to exchange the comparision operators accordingly.
0
The RockAuthor Commented:
yeah it works thanks one last thing  any idea on swapsize=($oram*1.5)  its not working well :(
0
Gerwin Jansen, EE MVETopic Advisor Commented:
use bc for that "swapsize=($oram*1.5)" - like:

swapsize=$(echo "${oram}*1.5" | bc)
0
andreasSystem AdminCommented:
use let. Shell scripts do not support decimals neither in results nor in operands.

su you could try let swapsize=$oram*3/2.

Will give 4 for an oram of 3
if you need to be sure its at least 1.5 than add 1.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
andreasSystem AdminCommented:
@gerwin thank for bc, didnt know that :)
0
The RockAuthor Commented:
Yup great but uts giving me in decimal i need to round off it
Current Ram = 2006
Current Swap = 1023
New Swap Size = 3009.0
0
Gerwin Jansen, EE MVETopic Advisor Commented:
round down using bc again:

swapsize=$(echo "${oram}*1.5/1" | bc)
0
Gerwin Jansen, EE MVETopic Advisor Commented:
>> Current Ram = 2006
You have 2006 G of ram? You specified "free -g" above which should give you "2" instead of "2006".
0
The RockAuthor Commented:
Thank you so much Andreas and Grewin for quick help. :)
0
Gerwin Jansen, EE MVETopic Advisor Commented:
You're welcome ;)
I don't care about points but you should have selected the first comment as an (assisted) solution as well because that got you the mem/swap values into variables.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Linux

From novice to tech pro — start learning today.

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.