2016-11-24 7 views
0

netcat을 사용하여 채팅용 sh 스크립트를 만들고 있습니다. 이것은 코드입니다 :넷캣 채팅 bash 스크립트 문제

#!/bin/bash 

clear 

echo 
echo "-----------------------" 
echo "| handShaker Chat 2.0 |" 
echo "-----------------------" 
echo 

read -p 'Server or Client setUp? (s or c) > ' type 

if [ $type == 's' ] || [ $type == 'S' ] || [ $type == 'server' ] 
then 
    read -p 'Port (4321 Default) > ' port 
    if [ $port -gt 2000 ] && [ $port -lt 6500 ] 
    then 
     echo 
     echo "Started listening on port $port." 
     echo "Stream (Press ctrl + shift to end session) >" 
     echo 
     awk -W interactive '$0="Anonymous: "$0' | nc -l $port > /dev/null 
    else 
     echo "handShaker Error > The port $port is not a in the valid range (2000 ... 6500)." 
    fi 
elif [ $type == 'c' ] || [ $type == 'C' ] || [ $type == 'client' ] 
then 
    read -p 'Port (4321 Default) > ' port 
    if [ $port -gt 2000 ] && [ $port -lt 6500 ] 
    then 
     read -p 'Destination IP > ' ip 
     if [[ $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]] 
     then 
      echo 
      echo "Started streaming $ip on port $port." 
      echo "Stream (Press ctrl + shift to end session) >" 
      echo 
      awk -W interactive '$0="Anonymous: "$0' | nc $ip $port > /dev/null 
     else 
      echo "handShaker Error > Invalid IP Address." 
     fi 
    else 
     echo "handShaker Error > The port $port is not a in the valid range (2000 ... 6500)." 
    fi 
else 
    echo "handShaker Error > $type is not a valid keyword." 
fi 

그러나 나는 다음과 같은 문제가 다음 AWK의 -W 매개 변수가 존재하지 않는 것, 그리고 프로그램은 실제로 클라이언트를 실행 한 후 중지합니다. 저는 macOS 터미널을 사용하고 있습니다.

누군가이 버그를 수정하고 스크립트를 개선하는 데 도움을 줄 수 있습니까?

+0

'awk'없이 스크립트가 실행됩니까? 잘못된 구문이 사용 된 것 같습니다. 당신이 그것을 밖으로 해보려고 했습니까? 'nc $ ip $ port'의 결과는 무엇입니까? 그냥'nc -l $ port>/dev/null'을 사용하여'awk' 부분없이 행을 수정할 수 있습니까? 나는 awk을 사용하여 감각을 보지 못했다 - – Inian

+0

그것은 awk없이 완벽하게 작동한다. 나는 그 라인에 주석을 달고 nc -l $ port와 nc $ ip $ port를 대신 넣었다. 이제 awk을 사용하여 올바른 출력을 얻으려고합니다. – Cristian

+0

'nc' 명령 출력에서'awk'가 필요한 출력은 무엇입니까? – Inian

답변

2

스크립트는 awk의 맛의에 정의되지 않은 awk-W interactive와 플래그의 잘못된 & 불필요한 사용을 가지고있다. 제거하면 문제가 해결됩니다.

또한 스크립트에는 bash 개의 변수가 정의되어 있으며 큰 따옴표없이 사용됩니다. 기억하십시오 double quote variables prevent globbing and word splitting.