シェルスクリプトを使用して配列から類似のファイル名を除外する

シェルスクリプトを使用して配列から類似のファイル名を除外する

たとえば、一連のファイルがありますfile=[a.yml, a.json,b.yml,b.json]forループするためにループを使用しています。配列にまたはが存在する場合は、ファイルの実行を除外する必要があります.json。ただし、たとえば配列でのみ実行する場合は、ループを通過する必要があります。シェルスクリプトを使用してこれを達成できますか?.yml.yaml.json.json[a.json,b.json]

基本的に配列の文字列を比較し、動的に重複する項目を除外したいと思います。

シェルを使ってこれを達成できますか?


filename=$(git show --pretty="format:" --name-only $CODEBUILD_RESOLVED_SOURCE_VERSION)
echo "$filename"
mkdir report || echo "dir report exists"
for file in ${filename}; do
    echo ${file}
    ext=${file##*.}
    if [ $ext == "yaml" ] || [ $ext == "yml" ] || [ $ext == "json" ]; then
        if [ ${file} != "buildspec.yml" ] && [ ${file} != "stackupdatebuildspec.yml" ] && [ ${file} != "specs.json" ]; then
            stack=$(echo ${file} | cut -d "." -f 1)
            stackName="${stack//[\/]/-}"
            echo ${stackName}
            howmany() { echo $#; }
            numOfFilesValidated=$(howmany $listOfFilesToScan)
            echo "=========================================== Syntax validation started =============================================================="
            cfSyntaxLogFile="cf-syntax-validation-output"
            numOfFailures=0
            numOfValidatedFiles=0
            for file_to_scan in $listOfFilesToScan; do
                if [[ $(cfn-lint -t "$file_to_scan" --parameter-values-path "${stack}.json" --append-rules ./append_rules --override-spec ./over_ride_spec/spec.json |& tee -a $cfSyntaxLogFile) == "" ]]; then
                    echo "INFO: Syntax validation of template $file: SUCCESS"
                    ((numOfValidatedFiles++))
                else
                    echo "ERROR: Syntax validation of template $file: FAILURE"
                    ((numOfFailures++))
                fi
            done'''

ベストアンサー1

続行する前に、他の値があるかどうかを確認できます。Bash配列に値が含まれていることを確認してください。

.jsonファイルを配列に保存し、.yml後でループ内にファイルが存在することを確認することもできます。

bashよいパラメータ置換があります:

${parameter%word}

Remove matching suffix pattern.

あなたの場合は次のようになります(削除.jsonと追加.yml

if [ ! -f "${filename%.json}.yml" ]
then
    # process
fi

おすすめ記事