将文件作为函数的输入 - Posix shell 脚本

Take file as input to function - Posix shell script

我正在 Posix shell 脚本中编写一个函数,如果 env 变量设置为 true,则压缩文件,然后将该文件推送到远程位置。我如何将任意数量的要压缩的文件作为参数传递给函数,而不是仅仅压缩一个全局文件?下面是我的代码:

CODE:

#!/bin/sh

COMPRESSION=true

FILE="test.json"
LOG_FILE="test.log"

compress_file() {
    gzip $FILE
    stat $FILE.gz
    if [ $? -eq 0 ]; then 
        FILE=$FILE.gz 
    else 
        FILE=$FILE
    fi
}

push_file() {
    FILE=
    cmd() {
        STORAGE_URL="https://somepath"
        TIMESTAMP=$(date -u '+%a, %d %b %Y %T GMT')
        
        if [ "$COMPRESSION" = true ]; then
            compress_file
            CONTENT_TYPE="'content-type: application/gzip'"
        else
            CONTENT_TYPE="'content-type: application/json'"
        fi
        
        curl --fail --silent --show-error -X PUT -T $FILE -H $CONTENT_TYPE -H 'x-ms-version: 2020-02-10' -H "x-ms-date: $TIMESTAMP" "$STORAGE_URL"

    }
}

push_file()

举例来说,我想同时压缩 $FILE$LOG_FILE,或者一个而不压缩另一个。或者,任意数量的文件。

您将停止使用全局变量

compress_file() {
    local file
    for file in "$@"; do
        gzip "$file"
    done
}

并像

一样调用函数
compress_file "$FILE" "$LOG_FILE"

函数的所有参数(又名位置参数)都位于 "$@" 类数组变量中