엔터프라이즈 호스트의 전체 목록이 포함된 입력 목록이 있습니다( /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.com
vs. 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
대신 사용하세요 .hostname
ssh
답변2
몇 가지 질문이 있습니다:
CPU 이름
로그인 시 이 변수가 존재하는지 확인하지 않는 한 hostname
다음 명령을 사용해야 합니다.
chk=$(hostname)
SSH
ssh $host
로그인하고 터미널 입력을 기다리세요. 종료 후 다음 명령을 실행합니다 ssh
. 호출에 명령을 추가해야 합니다 ssh
. 모든 것을 여기에 전달하는 case
것은 약간의 시간이 들지만 , ssh
내가 이해한 바로는 다음과 같은 결과를 원합니다 hostname
.
chk="(ssh "$host" hostname)"