010#文件锁定

Posted bigtree2pingping

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 位置

 

以上是关于010#文件锁定的主要内容,如果未能解决你的问题,请参考以下文章

我在哪里更改此 Python 代码片段以将临时文件保存在 tmp 文件夹中?

如何在不锁定活动方向的情况下锁定片段方向?

Android 片段不保存状态,在旋转/屏幕锁定/返回时崩溃

按下锁定/主页按钮时的通知,单击返回选项卡片段时的通知

作业一:登录界面(优化,能读取锁定文件中的任意用户名,一旦发现所输入的用户名是锁定文件中的,立即告知并跳出循环)

锁定AppendAllText与TextWriter