LINUX.ORG.RU

bash: while + if. прошу помочь разобраться

 , ,


0

2

сразу предупрежу, я в написании скриптов новичок.
пытаюсь написать скрипт для двусторонней синхронизации по rsync.
идея в том, что когда юзер делает логаут, запускается rsync. вот как я это решил реализовать:

#!/bin/bash
#

USER_BASE1=./base/user_base1;
USER_BASE2=./base/user_base2;
DIFF=./base/diff;
HOMEDR=./base/homedir;
STR=1;
STR=$BSTR;
TRGT=Х.Х.Х.Х;
LOGFILE=./rsync.log;
RSYNC=/opt/rsync/bin/rsync;

exec 6>&1
exec > $LOGFILE

#беру списки пользователей из who, т.к. данные пользователи хранятся в базе LDAP и другим способом я не придумал как извлечь их.
who | awk '{print $1}' > $USER_BASE1;
sleep 30m; #за такое время предполагается, что вывод [i]who[/i] изменится
who | awk '{print $1}' > $USER_BASE2;

#здесь будут храниться юзеры, которые сделали логаут
comm -23 $USER_BASE1 $USER_BASE2 | grep -v "^root" > $DIFF;

#получаю username
while [ -n $uid ]
do
	
	
#получаю homedir таким способом, потому что другим не выйдет-используется Solaris с Trusted Extension и домашние директории юзеров хранятся в своих лейбелах
	
		if [ -n `cat $HOMEDR | grep $uid  | cut -d ":" -f2` ]
			then
				export homedir=`cat $HOMEDR | grep $uid  | cut -d ":" -f2`
			else
				export homedir=`find /zone/*/home/ -name $uid 2>/dev/null`
                                echo $uid":"$homedir>>$HOMEDR;
		fi
#запускаю rsync	
	$RSYNC --rsync-path=$RSYNC --modify-window=1 --delete -tucaHSzprogl  -e 'ssh -i ~/.ssh/rsync' $homedir/ root@$TRGT:$homedir/;
	
	export STR=$((STR + 1));

done 

echo `date`\ "Sync complete";
exec 1>&6 6>&-
echo
exit 0

в итоге в логи валится

file has vanished: "/proc/5835/path/3"
file has vanished: "/proc/5841/path/3"
file has vanished: "/proc/5867/path/3"
file has vanished: "/proc/5855/path/3"
file has vanished: "/proc/5861/path/3"
file has vanished: "/proc/5873/path/3"

я думаю, что я не правильно создал конструкцию while + if. может можно как-то это изменить? и ещё вопрос.как перенаправить в логи вывод исполняемых команд?



Последнее исправление: forestbeast (всего исправлений: 2)

#!/bin/bash -x
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.