zoukankan      html  css  js  c++  java
  • 010#文件锁定

    #!/bin/bash
    # FILENAME:filelock
    
    # 默认重试次数
    retries="10"
    
    # 默认操作
    action="lock"
    
    # 用于锁文件的空命令
    nullcmd="'which true'"
    
    # 设置选项
    while getopts "lur:" opt; do
      case $opt in
        l) action="lock"     ;;
        u) action="unlock"   ;;
        r) action="$OPTARG"  ;;
      esac
    done
    
    shift $(($OPTIND - 1))
    # $OPTIND 是参数指针(选项索引)
    
    if [ $# -eq 0 ]; then
      cat<<EOF >&2
    Usage: $0 [-l|-u] [-r retries] LOCKFILE
    Where -l requests a lock (the default),
    -u requests an unlock, -r X specifies a max
    number of retries before it fails (default = $retries).
    EOF
      exit 1
    fi
    
    # 确定是否有lockfile命令
    if [ -z "$(which lockfile | grep -v '^no ')" ]; then
      echo "$0 failed: `lockfile` utility not found in PATH." >&2
      exit 1
    fi
    
    if [ "$action" = "lock" ]; then
      if ! lockfile -1 -r $retries "$1" 2>/dev/null; then
        echo "$0: Failed: Couldn't create lockfile in time." >&2
        exit 1
      fi
    else
      if [ ! -f "$1" ]; then
        echo "$0: Warning: lockfile $1 doesn't exist to unlock." >&2
        exit 1
      fi
      rm -f "$1"
    fi
    
    exit 0
    View Code

    备注:

    1、此脚本需要保证系统中预装了lockfile,可通过 "man 1 lockfile" 来确认,看到了相应的手册页就说明安装了
    2、OPTARG:表示当前选项的参数
    3、OPTIND:表示下一个选项在【参数列表】中的位置
      参数列表的初始值为1(即从$1开始)
      处理带参数的选项,值加2;
      处理不带参数的选项或非法选项,值加1
      在case匹配开始的时候就已经增加,指向了下一个选项的位置
      shift $(($OPTIND-2)) 让当前选项(正在处理的选项)处于 $1 位置
      shift $(($OPTIND-1)) 让下一个选项(未处理的选项)处于 $1 位置
    *** 你必须十分努力,才能看起来毫不费力 ***
  • 相关阅读:
    【Java】增强的for流程
    xxxxx
    lyphtesttest rename of file
    lyphtesttest winmerge class の比較
    lyphtesttest sql of system session
    lyphtesttest 常用ファイルの操作、検索。excelの操作  java
    Maven3(2.集成maven插件到eclipse(包含eclipse安装svn步骤))
    Maven3(1.下载maven安装与配置)
    centos6 安装hbase+hadoop单机版
    centos6 安装jdk1.6
  • 原文地址:https://www.cnblogs.com/bigtree2pingping/p/12989950.html
Copyright © 2011-2022 走看看