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
备注:
1、此脚本需要保证系统中预装了lockfile,可通过 "man 1 lockfile" 来确认,看到了相应的手册页就说明安装了 2、OPTARG:表示当前选项的参数 3、OPTIND:表示下一个选项在【参数列表】中的位置 参数列表的初始值为1(即从$1开始) 处理带参数的选项,值加2; 处理不带参数的选项或非法选项,值加1 在case匹配开始的时候就已经增加,指向了下一个选项的位置 shift $(($OPTIND-2)) 让当前选项(正在处理的选项)处于 $1 位置 shift $(($OPTIND-1)) 让下一个选项(未处理的选项)处于 $1 位置
*** 你必须十分努力,才能看起来毫不费力 ***