
#!/bin/bash
mylanip=$(hostname -I | awk '{print $1}')
touch /opt/portmapper/0prelims
echo `java -jar /opt/portmapper/portmapper.jar -list | grep $mylanip > /opt/portmapper/0prelims`
# HTTPS
portprelim=$(cat /opt/portmapper/0prelims | grep ${mylanip}:443 | awk '{print $4}')
if [ "$portprelim" = $mylanip:443 ]; then
echo "Nothing Altered for HTTPS"
fi
if [ "$portprelim" != $mylanip:443 ]; then
java -jar /opt/portmapper/portmapper.jar -lib org.chris.portmapper.router.sbbi.SBBIRouterFactory -delete -protocol TCP -internalPort 443 -externalPort 443 >/dev/null ; sleep 2 ;
java -jar /opt/portmapper/portmapper.jar -lib org.chris.portmapper.router.sbbi.SBBIRouterFactory -add -protocol TCP -internalPort 443 -externalPort 443 -ip $mylanip -description HTTPS >/dev/null ; sleep 2 ;
echo "Added port forwarding for HTTPS"
fi
# Private TTY
portprelim=$(cat /opt/portmapper/0prelims | grep ${mylanip}:57 | awk '{print $4}')
if [ "$portprelim" = $mylanip:57 ]; then
echo "Nothing Altered for Private TTY"
fi
if [ "$portprelim" != $mylanip:57 ]; then
java -jar /opt/portmapper/portmapper.jar -lib org.chris.portmapper.router.sbbi.SBBIRouterFactory -delete -protocol TCP -internalPort 57 -externalPort 57 >/dev/null ; sleep 2 ;
java -jar /opt/portmapper/portmapper.jar -lib org.chris.portmapper.router.sbbi.SBBIRouterFactory -add -protocol TCP -internalPort 57 -externalPort 57 -ip $mylanip -description PrivateTTY >/dev/null ; sleep 2 ;
echo "Added port forwarding for Private TTY"
fi
# HTTP
portprelim=$(cat /opt/portmapper/0prelims | grep ${mylanip}:80 | awk '{print $4}')
if [ "$portprelim" = $mylanip:80 ]; then
echo "Nothing Altered for HTTP"
fi
if [ "$portprelim" != $mylanip:80 ]; then
java -jar /opt/portmapper/portmapper.jar -lib org.chris.portmapper.router.sbbi.SBBIRouterFactory -delete -protocol TCP -internalPort 80 -externalPort 80 >/dev/null ; sleep 2 ;
java -jar /opt/portmapper/portmapper.jar -lib org.chris.portmapper.router.sbbi.SBBIRouterFactory -add -protocol TCP -internalPort 80 -externalPort 80 -ip $mylanip -description HTTP >/dev/null ; sleep 2 ;
echo "Added port forwarding for HTTP"
fi
exit
4433 라인이 아닌 443 라인만 얻으려면 어떻게 해야 합니까? 확인을 위해 변수에 둘 다 입력합니다. 문자열을 수동으로 수행하면 아래 문자열이 변수에 배치됩니다.
10.0.0.30:443 10.0.0.30:4433
반복적으로 종료되는 출력은 다음과 같습니다.
Added port forwarding for HTTPS
Nothing Altered for PrivateTTY
Nothing Altered for HTTP
여기 내 0prelims에서 발췌한 내용이 있습니다.
12:45:43.322 [main] INFO o.f.cling.transport.spi.StreamServer - Created server (for receiving TCP streams) on: /10.0.0.30:44725
12:45:43.324 [main] INFO o.f.cling.transport.spi.DatagramIO - Creating bound socket (for datagram input/output) on: /10.0.0.30
TCP :7881 -> 10.0.0.30:7881 enabled Deluge 1.3.12 at 10.0.0.30:7881
TCP :4433 -> 10.0.0.30:4433 enabled Deluge 1.3.12 at 10.0.0.30:4433
UDP :7881 -> 10.0.0.30:7881 enabled Deluge 1.3.12 at 10.0.0.30:7881
TCP :57 -> 10.0.0.30:57 enabled PrivateTTY
TCP :443 -> 10.0.0.30:443 enabled HTTPS
TCP :80 -> 10.0.0.30:80 enabled HTTP
답변1
스크립트 출력쉘체크. 문제를 수정하세요.
Line 4:
echo `java -jar /opt/portmapper/portmapper.jar -list | grep $mylanip > /opt/portmapper/0prelims`
^-- SC2046: Quote this to prevent word splitting.
^-- SC2005: Useless echo? Instead of 'echo $(cmd)', just use 'cmd'.
^-- SC2006: Use $(..) instead of legacy `..`.
^-- SC2086: Double quote to prevent globbing and word splitting.
Line 6:
portprelim=$(cat /opt/portmapper/0prelims | grep ${mylanip}:443 | awk '{print $4}')
^-- SC2002: Useless cat. Consider 'cmd < file | ..' or 'cmd file | ..' instead.
^-- SC2086: Double quote to prevent globbing and word splitting.
Line 7:
if [ "$portprelim" = $mylanip:443 ]; then
^-- SC2086: Double quote to prevent globbing and word splitting.
Line 10:
if [ "$portprelim" != $mylanip:443 ]; then
^-- SC2086: Double quote to prevent globbing and word splitting.
Line 12:
java -jar /opt/portmapper/portmapper.jar -lib org.chris.portmapper.router.sbbi.SBBIRouterFactory -add -protocol TCP -internalPort 443 -externalPort 443 -ip $mylanip -description HTTPS >/dev/null ; sleep 2 ;
^-- SC2086: Double quote to prevent globbing and word splitting.
Line 16:
portprelim=$(cat /opt/portmapper/0prelims | grep ${mylanip}:57 | awk '{print $4}')
^-- SC2002: Useless cat. Consider 'cmd < file | ..' or 'cmd file | ..' instead.
^-- SC2086: Double quote to prevent globbing and word splitting.
Line 17:
if [ "$portprelim" = $mylanip:57 ]; then
^-- SC2086: Double quote to prevent globbing and word splitting.
Line 20:
if [ "$portprelim" != $mylanip:57 ]; then
^-- SC2086: Double quote to prevent globbing and word splitting.
Line 22:
java -jar /opt/portmapper/portmapper.jar -lib org.chris.portmapper.router.sbbi.SBBIRouterFactory -add -protocol TCP -internalPort 57 -externalPort 57 -ip $mylanip -description PrivateTTY >/dev/null ; sleep 2 ;
^-- SC2086: Double quote to prevent globbing and word splitting.
Line 26:
portprelim=$(cat /opt/portmapper/0prelims | grep ${mylanip}:80 | awk '{print $4}')
^-- SC2002: Useless cat. Consider 'cmd < file | ..' or 'cmd file | ..' instead.
^-- SC2086: Double quote to prevent globbing and word splitting.
Line 28:
if [ "$portprelim" = $mylanip:80 ]; then
^-- SC2086: Double quote to prevent globbing and word splitting.
Line 31:
if [ "$portprelim" != $mylanip:80 ]; then
^-- SC2086: Double quote to prevent globbing and word splitting.
Line 33:
java -jar /opt/portmapper/portmapper.jar -lib org.chris.portmapper.router.sbbi.SBBIRouterFactory -add -protocol TCP -internalPort 80 -externalPort 80 -ip $mylanip -description HTTP >/dev/null ; sleep 2 ;
^-- SC2086: Double quote to prevent globbing and word splitting.
답변2
대신에
grep ${mylanip}:443
하다
grep "${mylanip}:443 "
따라서 443 이후의 공백은 검색 표현식의 일부를 가져옵니다.