for 루프에서 텍스트 파일의 행을 스크립트로 전달

for 루프에서 텍스트 파일의 행을 스크립트로 전달

아래에는 Ubuntu에서 실행되는 객체 스토리지 아키텍처에서 파일 크기를 찾는 실행 스크립트가 있습니다. 내가 겪고 있는 문제는 스크립트가 한 번에 하나의 계정을 확인하도록 작성되어 훌륭하게 작동한다는 것입니다. 그러나 여러 계정을 순차적으로 구문 분석하도록 수정하려는 경우 어떻게 이것이 가능합니까? 스크립트 상단의 변수를 대체하기 위해 다른 텍스트 파일의 매개변수 목록을 전달하는 방법이 있습니까?

예를 들어, 다른 텍스트 파일 test.txt에 다음 줄이 포함되어 있는 경우:

auto02 FfiBftkjgS8hnQn79Arj7PiHfvtsgn
qa04 s67aeYD6521pPgt7TknvGxKvF9WxNF

위의 파일에서 사용자와 키를 가져와서 모든 계정을 반복하기 위해 일부 루프에서 이 스크립트 상단의 변수로 바꿀 수 있습니까?

#!/bin/bash

# Variables to be set
auth=http://sslabapi/auth/v1.0 # Auth URL
user=qa04 # Username
key=s67aeYD6521pPgt7TknvGxKvF9WxNF # Password
size=500000 # Minimum file size in bytes

# Env variables set
ST_AUTH="$auth"
ST_USER="$user"
ST_KEY="$key"

# Env variables exported
export ST_AUTH
export ST_KEY
export ST_USER

# Timestamp function
timestamp() {
    date +"%Y-%m-%d %T"
}

# Main Loop
containerList="$(swift list)"
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" >> bigFiles.txt
echo "$(timestamp): Account for $user" >> bigFiles.txt
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" >> bigFiles.txt
echo "Starting check for files > $size bytes in the $user user account..."
for i in $containerList; do
    echo "*************************" >> bigFiles.txt
    echo "Container $i" >> bigFiles.txt
    echo "*************************" >> bigFiles.txt
    echo "Container $i"
    IFS=$'\n'
    olist=($(swift list -l $i))
    for a in ${olist[@]}; do
        osize=`echo "$a" | awk '{print $1}'`
        if [ $osize -gt "$size" ]; then
            echo "Found one: $a"
            echo "$a" >> bigFiles.txt
        fi
    done
done

다음은 제공된 추가 사항이 포함된 내 스크립트의 편집된 버전입니다.

#!/bin/bash

while read -r user key
do
# Variables to be set
auth=http://sslabapi/auth/v1.0 # Auth URL
#user=$user # Username
#key=$key # Password
size=500000 # Minimum file size in bytes

# Env variables set
ST_AUTH="$auth"
ST_USER="$user"
ST_KEY="$key"

# Env variables exported
export ST_AUTH
export ST_KEY
export ST_USER

# Timestamp function
timestamp() {
    date +"%Y-%m-%d %T"
}

# Main Loop
containerList="$(swift list)"
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" >> bigFiles.txt
echo "$(timestamp): Account for $user" >> bigFiles.txt
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" >> bigFiles.txt
echo "Starting check for files > $size bytes in the $user user account..."
for i in $containerList; do
    echo "*************************" >> bigFiles.txt
    echo "Container $i" >> bigFiles.txt
    echo "*************************" >> bigFiles.txt
    echo "Container $i"
    IFS=$'\n'
    olist=($(swift list -l $i))
    for a in ${olist[@]}; do
        osize=`echo "$a" | awk '{print $1}'`
        if [ $osize -gt "$size" ]; then
            echo "Found one: $a"
            echo "$a" >> bigFiles.txt
        fi
    done
done
echo "...finished check!"
done < test.txt

답변1

당신이 해야 할 while일은 시작 부분에 간단한 루프를 추가하는 것 뿐입니다.

while IFS=' ' read -r user key
 do
  Your whole script
 done < test.txt

관련 정보