ping: 옵션에는 인수가 필요합니다 - 'c' 및 'usage: ping'

ping: 옵션에는 인수가 필요합니다 - 'c' 및 'usage: ping'

아래 코드를 실행하여 IP 주소, 수신 및 전송된 패킷 수를 표시해 보세요.

#!/bin/bash

interface=$1
ip=$2
packet=$3

if [[ $1 == "-h" ]]
then
    echo "Perform ping command and get an automated result"
    echo "Perform like   ./ping_lan.sh Interface IP Packet "
    echo "Example: ./ping_lan.sh eno1 192.168.7.4 10"
    exit
fi

ping -I $interface -q $ip -c $3 >> ping_summary.txt

transmit=$(grep -o '[0-9]\+ packets transmitted' ping_summary.txt | grep -o '[0-9]\+')

receive=$(grep -o ', [0-9]\+ received' ping_summary.txt | grep -o '[0-9]\+')

packet_loss=$(grep -o ', [0-9]\+% packet loss' ping_summary.txt | grep -o '[0-9]\+')
cat ping_summary.txt >> summary.txt
rm ping_summary.txt

if [[ $transmit -ne $packet ]]
then
    echo -n "FAIL: transmit package is: "
    echo -n $transmit
    echo -n " expected: "
    echo $packet
    exit 1
 fi

 if [[ $receive -ne $packet ]]
 then
    echo -n "FAIL: receive package is: "
    echo -n $receive
    echo -n " expected: "
    echo $packet
    exit 1
 fi


 if [[ $packet_loss -ne 0 ]]
 then
    echo -n "FAIL: transmit package is: "
    echo -n $packet_loss
    echo -n "expected: "
    echo "0"
    exit 1
 fi

 exit 0

내가 얻는 오류는 'usage ping'을 다음으로 바꾸려고 argument requires an argument시도했습니다.-c--c

"사용 핑"은 무엇을 의미하며 왜 표시됩니까?

  • 이 오류는 무엇을 의미합니까?
  • 이 오류가 발생하는 이유는 무엇입니까?
  • 이 오류를 방지하려면 어떻게 해야 합니까?

이것을 사용한 후 bash -x script_name내가 얻는 결과는 다음과 같습니다.

+ interface=
+ ip=
+ packet=
+ [[ '' == \-\h ]]
+ ping -I -q -c 5
Usage: ping [-aAbBdDfhLnOqrRUvV64] [-c count] [-i interval]         [-I interface]
[-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos]
[-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]
[-w deadline] [-W timeout] [hop1 ...] destination
Usage: ping -6 [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
[-l preload] [-m mark] [-M pmtudisc_option]
[-N nodeinfo_option] [-p pattern] [-Q tclass] [-s packetsize]
[-S sndbuf] [-t ttl] [-T timestamp_option] [-w deadline]
[-W timeout] destination
++ grep -o '[0-9]\+ packets transmitted' ping_summary.txt
++ grep -o '[0-9]\+'
+ transmit=
++ grep -o ', [0-9]\+ received' ping_summary.txt
++ grep -o '[0-9]\+'
+ receive=
++ grep -o ', [0-9]\+% packet loss' ping_summary.txt
++ grep -o '[0-9]\+'
+ packet_loss=
+ cat ping_summary.txt
do_ping_lan.sh: line 22: summary.txt: Permission denied
+ rm ping_summary.txt
+ [[ '' -ne '' ]]
+ [[ '' -ne '' ]]
+ [[ '' -ne 0 ]]
+ exit 0

스크립트를 호출하는 데 사용하는 명령은 다음과 같습니다.

    sudo ./script_name interface ip packet 
    sudo ./do_ping_lan.sh wlan0 192.168.0.1 5

답변1

스크립트를 올바르게 호출하지 않습니다. 출력을 봅니다.

+ ping -I -q -c 5
Usage: ping [-aAbBdDfhLnOqrRUvV64] [-c count] [-i interval]         [-I interface]

어떤 매개변수에도 값이 없다는 것을 명확하게 알 수 있으므로 ping사용법 메시지가 표시됩니다.

나중에,

+ cat ping_summary.txt
do_ping_lan.sh: line 22: summary.txt: Permission denied

summary.txt현재 디렉터리에는 쓸 수 없습니다. 임시 파일(StackExchange 관련 답변 참조)이나 기타 쓰기 가능한 파일에 써야 합니다 mktemp.

관련 정보