Hello,
I currently have very little experience with Shell scripting and trying to create a script for the purpose of collecting the size of a couple sizes on 4 different Hosts. The Idea is to collected the information from the files in which the script is kicked off on, store the values into Variables, SSH to the next Host and repeat for the remaining 2. With Variables Collected I would like to compare the sizes and output that they matched.
This is what I have come up with so far but not the most familiar with constructs and especially the SSH Process.
If someone could help get this functioning, or possibly has suggestions for more efficient scripting with less repetition It would be greatly appreciated.
I appreciate the advice, I was kind of thinking the same thing myself while looking at it that I needed some sort of for loop to iterate through the servers executing the same command while storing file locations in variables and simply comparing each server to the 1st. I don't really have any idea of how i could apply a for loop to ssh multiple servers that were in an Array for instance. Though I did rework the code a bit and came up with the following solution, though you couldn't be as specific in your output you could easily spot an error.
Would the following code do the trick or am I missing something?
Thanks for the suggestions.
You will have to define the function on each node separately, and the local variables like FILESZ1 won't be available there.
How about creating a server file like
to which you could even add your local server entry (user@server1) as the first line provided it has an sshd service running, and then, using shell arrays for the file sizes
leaving you with two file size arrays of four elements each to work upon locally. Admittedly, this has been tested on bash only, as I don't have a ksh machine here, but corrections - if necessary at all - should be minor.
Thanks for the feedback and option, Though being very new this that code is a bit over my head so I'm currently Dissecting it right now to try and get a better understanding as to what exactly is going on piece by piece.
So if i have this correct for the 1st part you could create a file like SV.fil in the same directory with code such as:
I get that the cat command is simply stating "Read the following Contents" what is the "svctl" all about?
Next it appears you are starting a while loop that's reading that SV.fil that would have to be in the same directory in the loop it appears you have created 2 Arrays "read FILESZ1[++CNT] read FILESZ2[CNT]", which i'm guessing the "++" increments it, though why is that not in "FILESZ2[CNT]" ? Did I not understand that portion correctly?
The rest of it look self explanatory iterating through the servers collecting the file size of each file adding them to each array (yet then there's that svctl again?)
Once this line has been executed I then have 2 Arrays in which I can simply use functions to compare all values and give outputs
Sorry I'm new and this scripting, and appreciate you taking the time
We need a text file containing the login information of the servers to visit. Choose a file name to taste, call it SV.fil, or, as I did, svctl (~ "server control"). No "extension" (remainder from MSDOS times) needed. As I can see, you already added your local host for ease of operation.
Yes,cat copies its stdin (or the files given as arguments) to stdout - that was just for showing readers the contents of that file.
In the while loop, we're reading the server info line by line into the SV variable, then execute a "compound command" consisting of two reads to populate two arrays' elements indexed by the CNT variable which in turn is pre-incremented once per loop, so both arrays are indexed by the same value. stdin of this compound command is redirected from a "here string", consisting of a "command substitution" $(...) that provides the stdout of the entire ssh command including the two stat commands executed on the remore node for the two target files.
With four servers in the control file, we should end up with eight file sizes, four for file1 and four for file2, in arrays FILESZ1 and FILESZ2, indexed 1 ... 4 (given CNT was unset or reset to 0 upfront). You now can work on those array elements, as you did before, like
. You could do it e.g. in a for loop 2 ... 4 to improve efficiency and readability.
Hi,
I created a skript in ksh which generate a file with semicolon as separator, this is an example of the file a created:
example content file:
hello;AAAA;2014-08-17
hello;BBBB;2014-08-17
hello;CCCC;2014-08-17
I would need to compare the content in of the second column of this file... (3 Replies)
Hi,
I am running a script that connets to a list of servers with SSH and runs a command but I have some servers that are asking for password (authorized keys is not configured properly).
Is there any way to do so that if I get a prompt for password just skip that entry?
my script:
... (1 Reply)
Hello,
I have an output file showing database sizes across the 3 environments that I use (LIVE, TEST & DEVELOPMENT).
I am trying to write a script that lets me know if the size of a db on one environment is different to its corresponding db on the other environments.
Here is an example... (4 Replies)
I need to write a bash script larger X Y that compares the sizes of two specified files X and Y,
and reports which file is larger. For example, if X is larger, the output should be "File X is larger",
while if Y is larger, the output should be "File Y is larger".
If the files are exactly the... (3 Replies)
Hi everyone!
I need to compare two file sizes.
One of them (size) will be stored in a flat file and the other coming from a listed file.
I can now get the first file size using:
SIZE=`ls -l $DOCTYPE | awk '{print $5}'`
1. How can I store this value in a flat file?
2. How... (2 Replies)
I need to get a file size and compare it to a previous day file size. If it's larger or smaller by 50 percent I'll replace the new with the old. I know how to get the file sizes but do not know how to calculate if it's 50 percent difference.
Thanks for your help. (2 Replies)
Hello,
I am working with KSH on AIX and I have 2 files generated from different sources... as seen below:
FILE1 FILE2
AAA AAA@ABS0001C
BBB BBB@ABS0003D
CCC CCC@ABS0023A
DDD DDD@ABC0145D
EEE EEE@ABS0090A
FFF FFF@ABS0002A
GGG GGG@ABC0150D
HHH
FILE1 is main main data source,... (4 Replies)
hi
ls -l * | sed 's/\+/ /g' | cut -f5 -d " " >out1
ls -l * | sed 's/\+/ /g' | cut -f5 -d " " >out2
diff out1 out2
i tried this it will work fine and i can see difference
but i need a script which should neglect, if the difference b/w files is small
and
it should display... (5 Replies)
Hello every one,
Iam newbie to this forum and shell programming &scripting.
i needed to compare each and every folder of two separate servers.
Actually I have copied some directory structure from one server to second server, to build on second server the files all should be copied... (3 Replies)
Is there a command that will return the name of the largest file within a directory? If so, can I set the returned filename into a variable? (4 Replies)