설치되지 않은 경우 for 루프에 패키지 설치 [닫기]

설치되지 않은 경우 for 루프에 패키지 설치 [닫기]

내 for 루프 스크립트에 어떤 문제가 있는지 알아내는 데 도움을 줄 수 있는 사람이 있나요? for 루프를 사용하여 변수 목록에서 패키지를 설치하려고 합니다. 내 문제는 목록에서 패키지를 가져오는 동안 설치할 첫 번째 패키지를 가져올 때입니다. 또한 모든 패키지를 동시에 설치합니다. 어떻게 확인할 수 있나요? 한 번에 하나씩 해야 해요.

REQPKGS="redhat-lsb-core telnet"

for pkg in $REQPKGS; do
    if yum -q list installed "$REQPKGS" > /dev/null 2>&1; then
        echo -e "$pkg is already installed"
    else
        yum install $REQPKGS -y
        echo "Successfully installed $REQPKGS"
    fi
done

내 스크립트의 결과:

+ REQPKGS='redhat-lsb-core telnet'
+ for pkg in '$REQPKGS'
+ yum -q list installed 'redhat-lsb-core telnet'
+ yum install redhat-lsb-core telnet -y
+ echo 'Successfully installed redhat-lsb-core telnet'
Successfully installed redhat-lsb-core telnet
+ for pkg in '$REQPKGS'
+ yum -q list installed 'redhat-lsb-core telnet'
+ yum install redhat-lsb-core telnet -y
Loaded plugins: product-id, refresh-packagekit, rhnplugin, security, subscription-manager
This system is receiving updates from RHN Classic or RHN Satellite.
Setting up Install Process
Package redhat-lsb-core-4.0-7.el6.x86_64 already installed and latest version
Package 1:telnet-0.17-48.el6.x86_64 already installed and latest version
Nothing to do
+ echo 'Successfully installed redhat-lsb-core telnet'
Successfully installed redhat-lsb-core telnet

답변1

$REQPKGS루프 변수( ) 대신 배열 변수( )를 루프에서 사용하므로 $pkg지시한 대로 정확히 수행되어 두 패키지를 두 번 설치합니다.

루프 내부를 for다음과 같이 변경합니다.

REQPKGS=(redhat-lsb-core telnet)

for pkg in "${REQPKGS[@]}"; do
    if yum -q list installed "$pkg" > /dev/null 2>&1; then
        echo -e "$pkg is already installed"
    else
        yum install "$pkg" -y && echo "Successfully installed $pkg"
    fi
done

for루프를 사용할 때 for루프의 각 반복에 대한 값을 보유하는 변수(한 번에 단일 패키지를 포함하는 변수)를 정의합니다 $pkg.

또는

REQPKGS=(redhat-lsb-core telnet)

yum install -y "${REQPKGS[@]}"

지정된 제거된 모든 패키지가 설치되고 설치된 모든 패키지는 건너뜁니다.

관련 정보