NBash
46 строк · 1.3 Кб
1#!/bin/bash
2
3retries="10" # Число проверок по умолчанию
4action="lock" # Действие по умолчанию
5
6# Обработка опций
7while getopts "lur:" opt; do
8case $opt in
9l ) action="lock" ;;
10u ) action="unlock" ;;
11r ) retries="$OPTARG" ;;
12esac
13done
14shift $((OPTIND - 1))
15
16# Проверка пустого ввода
17if [ $# -eq 0 ]; then
18cat << EOF >&2
19Использование: $0 [-l|-u] [-r retries] LOCKFILE
20Где -l блокировка (по-умолчанию), -u разблокировка, -r X
21определяет максимальное количество попыток разблокировки.
22EOF
23exit 1
24fi
25
26# Проверка lockfile в системе
27if [ -z "$(which lockfile | grep -v '^no ')" ]; then
28echo "$0 ошибка: утилита 'lockfile' не найдена" >&2
29exit 1
30fi
31
32# Основное тело
33if [ "$action" = "lock" ]; then
34if ! lockfile -1 -r $retries "$1" 2> /dev/null; then
35echo "$0: Ошибка: сейчас невозможно создать файл блокировки" >&2
36exit 1
37fi
38else
39if [ ! -f "$1" ]; then
40echo "$0: Ошибка: файл блокировки $1 отсутствует, невозможно разблокировать"
41exit 1
42fi
43rm -f "$1"
44fi
45
46exit 0