Jump to content
Compatible Support Forums
Sign in to follow this  
chewmanfoo

Shell Scripting Exercise: count physical RAM in MB

Recommended Posts

Guys,

 

I'm writing a series of scripts for deploying in our support center. One that I'm working on involves /proc/kcore, the physical RAM of a linux system. I'm trying to display the amount of physical RAM in a system by returning the size of this file divided by 1024.

 

I'd like it to eventually say: PHYSICAL RAM: 512MB.

 

Here's what I've tried, and the results:

 

Code:
$ echo "System RAM";ls -l /proc/kcoreSystem RAM-r--------    1 root     root     958595072 Feb 14 13:13 /proc/kcore$ $ ls -l /proc/kcore | 'expr $5/1024'/bin/ksh: expr $5/1024: not found$ ls -l /proc/kcore | echo $5$ ls -l /proc/kcore | echo $1$ ls -l /proc/kcore > echo $5/bin/ksh: cannot create echo: No such file or directory$ ls -l /proc/kcore | awk "print int($5/1024)"awk: cmd. line:1: print int(/1024)awk: cmd. line:1: ^ parse errorawk: cmd. line:1: print int(/1024)awk: cmd. line:1:            ^ unterminated regexpawk: cmd. line:2: print int(/1024)awk: cmd. line:2:                 ^ unexpected newline$ ls -l /proc/kcore | awk {print int($5/1024)}/bin/ksh: syntax error: `(' unexpected$ ls -l /proc/kcore | awk `BEGIN {print int($5/1024)}'> > ^C$ $ ls -l /proc/kcore | awk `{print int($5/1024)}`/bin/ksh: syntax error: `(' unexpected$ ls -l /proc/kcore | awk -F `{print int($5/1024)}'> > ^C$ ls -l /proc/kcore | awk -F `{print int($5/1024)}'> ^C$ awk '{ print int($5/1024) }` < ls -l /proc/kcore> ^C$ ls -l /proc/kcore > temp; awk '{ print int($5/1024) }` temp> ^C

 

As you can see, I'm stuck on awk. Can anyone shed some light on this?

 

I basically want to take the 5th field of an ls and display the result of that field divided by 1024.

 

Anyone?

 

TIA!

chewy

Share this post


Link to post

I think there's an error in these two lines:

 

Code:
$ ls -l /proc/kcore | 'expr $5/1024'/bin/ksh: expr $5/1024: not found

 

The AWK stuff is causing problems because these lines are sending AWK invalid data... (GIGO). I hopes this helps but I'm not that familiar with bash scripting, just prgramming... 8)

Share this post


Link to post

.

Quote:
'm writing a series of scripts for deploying in our support center. One that I'm working on involves /proc/kcore, the physical RAM

of a linux system. I'm trying to display the amount of physical RAM in a system by returning the size of this file divided by 1024.

 

I'd like it to eventually say: PHYSICAL RAM: 512MB.

 

Here's what I've tried, and the results:

 

Code:

$ echo "System RAM";ls -l /proc/kcore

System RAM

-r-------- 1 root root 958595072 Feb 14 13:13 /proc/kcore

$

$ ls -l /proc/kcore | 'expr $5/1024'

/bin/ksh: expr $5/1024: not found

$ ls -l /proc/kcore | echo $5

 

$ ls -l /proc/kcore | echo $1

 

$ ls -l /proc/kcore > echo $5

/bin/ksh: cannot create echo: No such file or directory

$ ls -l /proc/kcore | awk "print int($5/1024)"

awk: cmd. line:1: print int(/1024)

awk: cmd. line:1: ^ parse error

awk: cmd. line:1: print int(/1024)

awk: cmd. line:1: ^ unterminated regexp

awk: cmd. line:2: print int(/1024)

awk: cmd. line:2: ^ unexpected newline

$ ls -l /proc/kcore | awk {print int($5/1024)}

/bin/ksh: syntax error: `(' unexpected

$ ls -l /proc/kcore | awk `BEGIN {print int($5/1024)}'

>

> ^C

$

$ ls -l /proc/kcore | awk `{print int($5/1024)}`

/bin/ksh: syntax error: `(' unexpected

$ ls -l /proc/kcore | awk -F `{print int($5/1024)}'

>

> ^C

$ ls -l /proc/kcore | awk -F `{print int($5/1024)}'

> ^C

$ awk '{ print int($5/1024) }` < ls -l /proc/kcore

> ^C

$ ls -l /proc/kcore > temp; awk '{ print int($5/1024) }` temp

> ^C

 

 

As you can see, I'm stuck on awk. Can anyone shed some light on this?

 

I basically want to take the 5th field of an ls and display the result of that field divided by 1024.

 

The output of:

 

ls -l /proc/kcore

 

is:

 

-r-------- 1 root root 958595072 Feb 14 13:13 /proc/kcore

 

The number of column 5 should go into "$5" (apparently a variable) which should then be divided ("/") by 1024, to get

the number of bytes in megabytes. The number in column 5 may not be 'numeric', it may be a string of characters. This is most likely. There

is nothing here to separate column five from all the other columns, nor to determine and/or change column five to a

number and store it in a variable. Some programming languages will allow a character string to be divided by an integer,

but the results will not be valid in a mathematic expression.

 

this:

 

$ ls -l /proc/kcore | 'expr $5/1024' takes the output from "ls -l" and sent it through "|" to "'expr $5/1024'"

here is where the error comes in - when the shell executes that command ($ ls -l /proc/kcore | 'expr $5/1024') It

sends all the "ls -l" output to what is on the other side of the "|". It does not extract column 5, nor does it

ensure that the output is valid. When the command is executed you get:

 

/bin/ksh: expr $5/1024: not found

 

This is an error from the shell (/bin/ksh) - it could not execute "ls -l /proc/kcore | " because it was unable to locate something

called 'expr $5/1024'. I have never used ksh, but it may be different than bash, but it still seems that 'expr $5/1024' means

simething different to your shell than 'expr $5/1024' means to you. Regardless, because your shell does not have the ouput

of 'expr $5/1024', all the rest of the lines that depend upon the value of column five divided by 1024 will not output that value

to the screen, nor send it through awk.All the awk errors are meaningless, because it has nothing to work with. I hope this helps! 8)

Share this post


Link to post

Yeah, but all variables in the shell are strings.

 

That's why you can't say:

 

Code:
$x = 5$x = $x + 1echo $x

 

expr returns the numeric (integer) value of an expression, like "$x + 1"

 

But I still don't understand why this doesn't work...

 

help?

Share this post


Link to post

Close. Here's the answer:

 

ls -l /proc/kcore | awk {'print $5/1024'}

 

[root@corner ~]# ls -l /proc/kcore | awk {'print $5/1024'}

327676

 

Share this post


Link to post

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×