Недавно пришлось решать немного странную задачку на BASH. Был список в текстовом формате:
группа=путь
Нужно было пройтись по каждому элементу списка и установить группу указанного в нём же. На сервере стоял старый BASH, ассоциативных массивов, в котором ещё небыло. Написал вот это:
  1. #!/bin/bash
  2. if [ "$1" == "--help" ] || [ "$1" == "help" ]
  3. then
  4.         echo "Использование: <имя скрипта> <путь до списка> <путь до лог-файла> Все параметры не обязательны. Если скрипт не получит путь до файла-списка - попытается открыть файл 'list' в своей директории. Тоже самое касается лог-файла.";
  5.         exit 0;
  6. fi
  7.  
  8. if [ -z "$2" ]
  9. then
  10.         log="log.txt";
  11. else
  12.         log=$2;
  13. fi
  14.  
  15. mess () {
  16.  
  17.         date=`date  %D-%r`;
  18.         echo "[ $date] $1" >> $log;
  19.         echo "[ $date] $1";
  20.  
  21.         if [ "$2" -eq 1 ]
  22.         then
  23.                 exit 1;
  24.         fi
  25. }
  26.  
  27. if [ -w "$log" ]
  28. then
  29. echo "";
  30. else
  31.         mess "Лог-файл не доступен для записи." 0;
  32. fi
  33.  
  34. if [ -z "$1" ]
  35. then
  36.         l="list";
  37. else
  38.         l=$1;
  39. fi
  40.  
  41. list=$(cat $l);
  42.  
  43. if [ -z "$list" ]
  44. then
  45.         mess "Ошибка при открытии файла-списка!" 1;
  46. fi
  47.  
  48. for i in $list;
  49. do
  50.         group=`echo $i|cut -d "=" -f 1`
  51.         dir=`echo $i|cut -d "=" -f 2`
  52.  
  53.         if `chgrp -R $group $dir`
  54.         then
  55.                 mess "Установлена группа '$group' для дир. '$dir'" 0;
  56.         else
  57.                 mess "Ошибка при обработке дир. '$dir'" 0;
  58.         fi
  59. done
Скрипт по умолчанию считывает текстовый файл "list", лежащий рядом, в его директории. Если есть потребность указать файл из другой директории, вызывайте скрипт так:
script <путь-до-файл-листа> <путь-до-лог-файла>
Ещё можно посмотреть help-сообщение, командой script --help.


Статью пока никто не комментировал. Ваш комментарий может стать первым.

Войдите или зарегистрируйтесь, чтобы написать комментарий.