bash 출력을 변수 파일 이름으로 리디렉션하려고 합니다. 이것이 내 스크립트의 모습입니다
#!/bin/bash
for i in `cat servers`
do
if [ "$i" = "198.162.1.3" ];
then
var="apple"
fi
ssh test@$i "uname -n"
done > /tempout/uname_${var}.txt
내가 얻는 파일 이름은 /tempout/uname_.txt입니다.
예상되는 파일 이름은 uname_apple.txt여야 합니다.
답변1
코드의 변수는 var
루프가 출력 파일 생성을 시작하기 전에 사용됩니다.
ssh
명령 결과를 build 이름의 파일로 출력하려면 $var
다음을 수행합니다.
#!/bin/bash
while read -r server; do
if [ "$server" = "198.162.1.3" ]; then
var='apple'
else
var='unknown'
fi
ssh -n "test@$server" 'uname -n' >"/tempout/uname_$var.txt"
done <servers
여기에서는 입력 파일을 한 줄씩 읽도록(각 줄의 선행 및 후행 공백 무시) 루프를 변경했으며 명령문이 "true" 분기를 사용하지 않으면 var
값을 얻습니다.unknown
if
또한 가 -n
필요합니다 ssh
. 그렇지 않으면 ssh
사용 가능한 모든 입력(여기서는 파일에서 리디렉션됨 servers
)이 소비됩니다.
특히 여러 IP 주소를 테스트하는 경우 변경할 수 있는 또 다른 변경 사항은 case ... esac
대신 문을 사용하는 것입니다.if
#!/bin/bash
while read -r server; do
case $server in
198.162.1.3) var=apple ;;
198.162.1.5) var=cottage ;;
198.162.1.7) var=bumblebee ;;
*) var=unknown
esac
ssh -n "test@$server" 'uname -n' >"/tempout/uname_$var.txt"
done <servers