Mac和ubuntu 14.04上的Shell脚本:布尔命令行参数

时间:2016-09-18 18:59:46

标签: bash macos ubuntu

我正在尝试编写一个通用shell脚本来存档X天旧文件,这些文件与作为参数传递的模式相匹配。我很难在mac和ubuntu的脚本中使用布尔参数,regex参数和regex变量。我是shell脚本的新手。欢迎任何与问题或最佳实践相关的建议。以下是剧本:

#!/usr/bin/env bash

#Default source dir
SOURCE_DIR=./logs/
# Delete by default
DELETE=YES
# Archive files older by these many days
OLD=7
# Pattern to archive
PATTERN="*.log*"

# Use -gt 1 to consume two arguments per pass in the loop
# (each argument has a corresponding value to go with it).
while [[ $# -gt 1 ]]; do
    key="$1"
    case $key in
        -s|--source_dir)
            SOURCE_DIR="$2"
            shift # past argument
            ;;
        -d|--dest_dir)
            DEST_DIR="$2"
            shift # past argument
            ;;
        -o|--days)
            OLD="$2"
            shift # past argument
            ;;
        -p|--pattern)
            PATTERN="$2"
            shift # past argument
            ;;
        -n|--no-delete)
            DELETE=NO
            ;;
        *)
            # unknown option
        ;;
    esac
    shift # past argument or value
done


if [[ ! -d "$SOURCE_DIR" ]]; then
    echo 'Archive source does not exist'
    exit 1
fi
SOURCE_DIR=${SOURCE_DIR%/}

if [[ -z "$DEST_DIR" ]]; then
    DEST_DIR="${SOURCE_DIR%/}/backup"
fi
DEST_DIR=${DEST_DIR%/}

if [[ ! -d "$DEST_DIR" ]]; then
    echo 'Creating destination '$DEST_DIR
    mkdir -p -- "$DEST_DIR"
fi

echo $SOURCE_DIR
echo $DEST_DIR
echo $OLD
echo $PATTERN
echo $DELETE

files=$(find $SOURCE_DIR -mtime +$OLD -type f -name $PATTERN)
echo $files

if [[ $DELETE = YES ]]; then
    echo "Delete files"
else
    echo "Don't delete files"
fi

Mac上的Outpout:

(mysql30):recon-etl anshuc$ ./archive.sh -s junk/ -p *.py -o 10 -n
junk
junk/backup
10
*.py
YES
junk/__init__.py junk/client.py
Delete files
(mysql30):recon-etl anshuc$ 

ubuntu 14.04上的输出

anshuc:~/workspace/xyz$ ./archive.sh -s ae/tools/ -d ae/logs/backup/ -p *.py -n -o 420
ae/tools
ae/logs/backup
420
*.py
NO
ae/tools/services/__init__.py ae/tools/__init__.py 
Don't delete files
anshuc:~/workspace/xyz$

DELETE不在mac 上是关注的问题。另外,之前我遇到了 PATTERN 参数的问题。虽然在试错中我遇到了一种方法。但是,如果有人不使用引号或任何其他可能涉及的错综复杂的情况,我不确定副作用。对此的投入将使我更加了解。 :-) TIA

0 个答案:

没有答案