Bash의 경우 내부 변수 비교

Bash의 경우 내부 변수 비교

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를 실행해야 합니다.$SJump="/home/Lists/srv"J1SJ1$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 }'

-vAwk 변수를 특정 값으로 설정합니다 . 위 명령에서 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에 의해 출력된 값은 와 대략 동일한 쉘 변수에 할당됩니다 `...`.

관련 정보