if 조건 내에서 두 변수를 비교하려고 합니다.
#!/bin/bash
Jump="/home/Lists/srv"
S=`echo "$1" | perl -ne 'print lc'`
J1=`grep $S $Jump |awk '{print $1}'`
grep $S $Jump >> /dev/null
if [ $? = 0 ]
then
if [ "$S" == "$J1" ]
then
echo "$S" is equal to "$J1" :
ssh -qt $S "$2"
else
echo "$S" is not equal to "$J1"
ssh -qt $J1 "ssh -qt $S $2"
fi
else
ssh -qt $S "$2"
fi
실행하려고 할 때마다 항상 다른 조건으로 전환됩니다. 그리고 실행echo "$S" is not equal to "$J1"
이 스크립트 ./test.sh
뒤에 다음과 같은 서버 이름을 실행하고 있습니다.
./test.sh hostname1
그런 다음 대소문자를 낮추고 변수에 넣고 파일에서 S
검색해야 합니다 . 발견되면 첫 번째 열을 파악하여 다른 변수에 넣어야 합니다. 이제 와 값이 유사하면 ssh를 else(첫 번째)로, 먼저 ssh를 통해 else(첫 번째)로 ssh해야 합니다. 그렇지 않은 경우(두 번째) 점프 파일에서 찾을 수 없으면 직접 ssh를 실행해야 합니다.$S
Jump="/home/Lists/srv"
J1
S
J1
$S
$J1
$S
$S
$S
실행하면 첫 번째 다른 조건으로 바로 이동합니다. $S
비슷 하더라도 $J1
.
답변1
달성하려는 목표에 대한 설명에 따라 다음을 수행하는 스크립트가 될 수 있습니다.
#!/bin/bash
server="${1,,}"
jumphost="$( awk -vs="$server" '$0 ~ s { print $1; exit }' "/home/Lists/srv" )"
if [[ -z "$jumphost" ]] || [[ "$jumphost" == "$server" ]]; then
ssh -qt "$server" "$2"
else
ssh -qt "$jumphost" "ssh -qt \"$server\" \"$2\""
fi
매개변수 확장은 ${1,,}
값을 소문자로 만듭니다 $1
. 이전 버전의 경우 bash
다음을 대신 사용하세요.
server="$( printf '%s' "$1" | tr 'A-Z' 'a-z' )"
이 변수는 jumphost
파일의 첫 번째 행과 첫 번째 열에 있는 /home/Lists/srv
서버 이름과 일치하는 값 으로 설정됩니다. 이것은 단지 선택한다는 점에 유의하십시오.첫 번째파일에서 일치하고 일치는 다음과 같습니다.모두라인이 고려됩니다.
두 번째 열에만 일치하는 경우 Awk 스크립트에서 이를 변경합니다 $0
.$2
비어 있거나 $jumphost
와 같으면 $server
첫 번째 분기가 선택되고, 그렇지 않으면 두 번째 분기가 선택됩니다.
Awk 스크립트에 대한 설명을 요청합니다.
jumphost="$( awk -vs="$server" '$0 ~ s { print $1; exit }'
-v
Awk 변수를 특정 값으로 설정합니다 . 위 명령에서 Awk 변수를 s
값으로 설정했습니다 $server
. 그런 다음 이 변수를 Awk 스크립트에서 사용할 수 있습니다.
awk 스크립트에서,
$0 ~ s { print $1; exit }
{ ... }
조건이 true이면 $0 ~ s
그 안에 있는 코드가 실행됩니다. 조건은 $0 ~ s
" $0
일치(정규식) s
"을 의미합니다. 이 변수는 s
앞서 할당한 값이며 awk가 방금 읽은 현재 레코드(라인)의 내용입니다. 즉, 파일에서 서버 이름이 포함된 줄을 찾습니다.$server
$0
$2 == s
예를 들어 두 번째 열에서 정확히 일치하도록 강제하려면 as 조건을 사용할 수 있습니다 .
의 코드는 스크립트를 종료하기 전에 (행)의 첫 번째 필드(열)를 { ... }
인쇄 합니다. 둘 이상의 행이 일치하지 않도록 선택 해제합니다. 사용자가 지정한 값이 너무 모호하면 여러 행이 일치할 위험이 있습니다.$1
$0
$server
jumphost
$( ... )
마지막으로 awk에 의해 출력된 값은 와 대략 동일한 쉘 변수에 할당됩니다 `...`
.