** Finished ** Syncid.rc


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting ** Finished ** Syncid.rc
# 1  
Old 07-10-2007
** Finished ** Syncid.rc

So, the script I've been working on, since I was starting to learn Shell scripting is now complete.

This was coded in ksh, and I am very proud of it.

What this script does, is syncs up uid's across the network. So if you have 10 servers, with 10 usernames with different UID's - this will sync them up.

Special thanks to Aigles, who helped me with the chown part of the script! Smilie

This script requires that you set up ssh keys!

Code:
#############################################################
#This script will sync UID across AIX/Linux servers.
##############################################################

#----------------------- Variables -----------------------#
#id=`whoami`
id=
tmpvar="/tmp/{$USER}uid.tmp"


#----------------------- Functions -----------------------#
function check1 {
sudo grep -x $UID /etc/passwd | cut -d: -f3
}

function check2 {
sudo id -u $USER
}

#----------------------------------------------------------#

clear
echo "\n \n \n"
echo "This script will sync UID's across multiple servers." 
echo "It will also find all files owned by the user and set the ownership to the new UID."

echo
USER=
while [ -z "$USER" ] ;
do
echo "What user has an incorrect UID on the servers? \c"
read USER
if [ -z "$USER" ] ; then
echo "You must enter a valid User id...!"
USER=
fi
done

echo
UID=
while [ -z "$UID" ] ;
do
echo "What is the correct UID for $USER ? \c"
read UID
if [ -z "$UID" ] ; then
echo "You must enter a UID...!"
UID=
fi
done

echo
LIST=
while [ -z "$list" ];
do
  echo
  echo "** Which servers do you want to sync UID's up on?"
  echo "** List the servers, space delimited (e.g., server1 server2 server3) \n \t \c"
  read list
    if [ -z "$list" ]; then
      echo "You have to enter at least one server!"
      list=
    fi
done

sleep 2
echo " "
echo " "

echo "Searching to see if the UID is being used on any user on $list."
for server0 in $list
do
   ssh -q $id@$server0 "variable1=`check1`" 
   if [ "variable1 -ne $UID" ]; then
   echo "No UID found"
   else
   echo "UID already in use!!"; exit
fi
done    

sleep 2
echo " "
echo " "

echo "Searching to see if the UID is already being used by $USER"
for server00 in $list
do
   ssh -q $id@$server00 "variable2=`check2`" 
   if [ "$UID -ne $variable2" ]; then 
   echo "UID's are not the same. You may proceed"
   else "$USER already has an ID of $UID"; exit 
fi
done
echo " "
echo " " 
sleep 2
echo " "
echo "Searching for files owned by $USER, on the following servers: $list."
echo "Hold.."
echo "Any file found will be dumped into the temp file: /tmp/uid.tmp"
echo " "

for server in $list
do
   ssh -q $id@$server "sudo find / -user $USER | grep -v proc | grep -v dev > /tmp/{$USER}uid.tmp"
done

sleep 2

# Change the UID
for server2 in $list
do
   ssh -q $id@$server2 "sudo usermod -u $UID $USER"
   echo "If this fails, the UID you're trying to change to is probably in use already"
done

sleep 2

# Change the ownership
chown_command=""
for tmp in $tempvar
do
   chown_command="${chown_command}chown $UID $tmp;"
done

for server3 in $list
do
   ssh -q $id@$server3 "${chown_command}"
done


sleep 2

#Delete the temp files. --- Commented out for Debugging! Manually delete tmp file!! ---
for server4 in $list
do
   ssh -q $id@$server4 "sudo rm /tmp/{$USER}uid.tmp"
done

echo "All finished!"

exit 0

# 2  
Old 07-10-2007
This was tested on AIX and Linux. In fact, if you have 3 Linux servers and 3 AIX servers - it will sync them up on all 6. All the commands I used were universal to both!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to make sure that sub shells have finished before moving on?

Hello, I have a script that is running multiple instances of an application in parallel. # learn on f0 emergent -nogui -p $ScriptLoc/$PROJ fold_tag=f0 & sleep 5 # learn on f1 emergent -nogui -p $ScriptLoc/$PROJ fold_tag=f1 & sleep 5 # learn on f2 emergent -nogui -p... (4 Replies)
Discussion started by: LMHmedchem
4 Replies

2. Shell Programming and Scripting

Wait until firefox has finished

I am running a macro script from the command line. But the script doesn't wait until the task has finished. firefox imacros://run/?m=macro_script.iim firefox imacros://run/?m=macro_script2.iim How do I get it to wait until the macro has been completed? I am using imacros, a firefox... (1 Reply)
Discussion started by: locoroco
1 Replies

3. Shell Programming and Scripting

how to proceed when curl is finished

I have a script which uses cli curl to download the source code of a webpage and then tests if a specific string exists in the source. The problem is that the website has a slow response, so the eval expression hasn't completed when the test starts. The test returns a negative, and the curl... (8 Replies)
Discussion started by: locoroco
8 Replies

4. Programming

How can I tell when recv is finished with pending data?

I'm working with recv and I am having a heck of a lot of trouble ignoring excess data that I did not ask for. I was hoping someone could shine some light on the subject for me because I'm not getting anywhere fast. ---------- Post updated at 02:46 AM ---------- Previous update was at 12:31 AM... (2 Replies)
Discussion started by: Errigour
2 Replies

5. Shell Programming and Scripting

Create log for finished processes

Hi, I'm doing a script that generate some background process like for file in `find $dir -type f -maxdepth 1 -mtime -1`; do exp="java -cp process.jar testing $file &" eval $exp echo $! #Get the PID echo $(basename $file) >> log done Is there a way to know when those... (1 Reply)
Discussion started by: amondracorp
1 Replies

6. Shell Programming and Scripting

check if file finished to copy

Hi all, I have a script that is monitoring a hot folder. This script works fine with one exception when the script is executed while a file is being copied to the hot folder. What is the easiest method to check if the copy file is completed? I'd like to get the solution in bash :) (8 Replies)
Discussion started by: gigagigosu
8 Replies

7. Shell Programming and Scripting

How do I know all processes are finished?

Hi all, I am writing a C shell script that starts a program. The program forks of several child processes. Only when all child processes are done, I want to archive my log files. Below is what I have so far, but unfortunately it doesn't work. MyProgram if (-e processes.txt) then rm... (2 Replies)
Discussion started by: Carla
2 Replies

8. Shell Programming and Scripting

How to know a executable has finished his task

Hi frnds, I want to know is there a way by which we can know that a C++ executable has finished its job in shell script. My task is as follows: 1.Shell script calls a executable 2.Executable executes and performs its job of generating some reports. Now i want my shell script to... (4 Replies)
Discussion started by: electroon
4 Replies

9. UNIX for Dummies Questions & Answers

Has my script finished?

Hi I'm writing a script which will be run by cron every X minutes. I don't want cron to run my script again if the previous one has not yet finished. When the script first runs, I had the idea to store the Process ID in a file. When cron tries to run the script again, I would check the... (5 Replies)
Discussion started by: Bab00shka
5 Replies

10. UNIX for Advanced & Expert Users

Finding Out When A Process Has Finished?

Problem I have an application which basically runs lots of UNIX programs remotely, using the Telnet protocol. For each program it remotely executes, it stores the process ID (PID) for that process. At regular intervals, I would like my application to take the PID for every process still... (5 Replies)
Discussion started by: 1cuervo
5 Replies
Login or Register to Ask a Question