bash->установка бита владельца директории из списка
Недавно пришлось решать немного странную задачку на BASH. Был список в текстовом формате:
Нужно было пройтись по каждому элементу списка и установить группу указанного в нём же.
На сервере стоял старый BASH, ассоциативных массивов, в котором ещё небыло.
Написал вот это:
Скрипт по умолчанию считывает текстовый файл "list", лежащий рядом, в его директории. Если есть потребность указать файл из другой директории, вызывайте скрипт так:
Ещё можно посмотреть help-сообщение, командой script --help.
группа=путь
- #!/bin/bash
- if [ "$1" == "--help" ] || [ "$1" == "help" ]
- then
- echo "Использование: <имя скрипта> <путь до списка> <путь до лог-файла> Все параметры не обязательны. Если скрипт не получит путь до файла-списка - попытается открыть файл 'list' в своей директории. Тоже самое касается лог-файла.";
- exit 0;
- fi
- if [ -z "$2" ]
- then
- log="log.txt";
- else
- log=$2;
- fi
- mess () {
- date=`date %D-%r`;
- echo "[ $date] $1" >> $log;
- echo "[ $date] $1";
- if [ "$2" -eq 1 ]
- then
- exit 1;
- fi
- }
- if [ -w "$log" ]
- then
- echo "";
- else
- mess "Лог-файл не доступен для записи." 0;
- fi
- if [ -z "$1" ]
- then
- l="list";
- else
- l=$1;
- fi
- list=$(cat $l);
- if [ -z "$list" ]
- then
- mess "Ошибка при открытии файла-списка!" 1;
- fi
- for i in $list;
- do
- group=`echo $i|cut -d "=" -f 1`
- dir=`echo $i|cut -d "=" -f 2`
- if `chgrp -R $group $dir`
- then
- mess "Установлена группа '$group' для дир. '$dir'" 0;
- else
- mess "Ошибка при обработке дир. '$dir'" 0;
- fi
- done
script <путь-до-файл-листа> <путь-до-лог-файла>