여러 파일 경로에 입력이 있는지 확인하기 위한 Case 문 구문

여러 파일 경로에 입력이 있는지 확인하기 위한 Case 문 구문

엔터프라이즈 호스트의 전체 목록이 포함된 입력 목록이 있습니다( /home/completehostlistcheck.txt). 현재 있는 환경( 비교 합계 dev=/home/dev.txt에 대한 입력 )을 기반으로 prod=/home/prod.txt실행되고 echo현재 있는 환경을 말합니다. 문제는 대소문자 구문이 작동하지 않는다는 것입니다.

#!/bin/bash

dev=/home/dev.txt
prod=/home/prod.txt

for host in $(</home/completehostlistcheck.txt) 
do 
ssh $host

chk=$hostname
  case "$chk" in
dev) echo "this is dev"
;;
prod) echo "this is prod"
;;

esac 
done

답변1

개발 호스트와 프로덕션 호스트의 차이점을 알고 있거나 간단한 명명 규칙(예: dev.example.comvs. prod.example.com)이 있는 경우 다음과 같이 간단할 수 있습니다.

for host in $(</home/completelistlistcheck.txt); do
    case "$(ssh $host hostname)" in
        *dev*)
            env="development"
            break
            ;;
        *prod*)
            env="production"
            break
            ;;
        *)
            env="non-categorized"
            break
            ;;
    esac
    echo "$host is a $env host."
done

내용을 구문 분석해야 하는 각 호스트에 파일이 있는 경우 run 명령에 해당 파일을 전달하는 cat /path/to/file대신 사용하세요 .hostnamessh

답변2

몇 가지 질문이 있습니다:

CPU 이름

로그인 시 이 변수가 존재하는지 확인하지 않는 한 hostname다음 명령을 사용해야 합니다.

chk=$(hostname)

SSH

ssh $host로그인하고 터미널 입력을 기다리세요. 종료 후 다음 명령을 실행합니다 ssh. 호출에 명령을 추가해야 합니다 ssh. 모든 것을 여기에 전달하는 case것은 약간의 시간이 들지만 , ssh내가 이해한 바로는 다음과 같은 결과를 원합니다 hostname.

chk="(ssh "$host" hostname)"

관련 정보