Не могу найти логическую ошибку в скрипте, который должен выполнить tcpdump

Я написал сценарий, который сравнивает время, и если это то же время начала, что и текущее время, а не время окончания, он запускает tcpdump. И если время окончания похоже на текущее время, он ищет PID и убивает его. Но я думаю, что в этом все еще есть логическая ошибка, но я действительно не знаю, как ее решить.

Code:
#!/bin/sh
source /media/usbhd-sd[b-d]1/config.conf
pluggedin=true
echo $TIMESTART
echo $TIMEEND
echo $$
echo $Zeit
echo $$ >> /tmp/test.txt
while [ $pluggedin ];do
        Zeit=$(date +"%T")
        if [[ $TIMESTART == $Zeit ]];then
                if [[ $TIMEEND != $Zeit ]] && [ "$(pidof tcpdump)" == "" ];then
                        echo "tcpdump started"
                        sudo tcpdump -i eth0 -w /media/usbhd-sd[b-c]1/abfrage2.pcap &
                        #sudo umount /dev/sdb1
                else
                        pid1=$(ps -eo pid,args|awk '/abfrage2/ && ! /awk/{print $1}')
                        echo $pid1 >> /tmp/test.txt
                        sudo kill $pid1
                        echo "autodump stopped"
                fi

        else
        echo "tcpdump not yet started"
        fi
done

Я уже отлаживал его, и он дает мне этот вывод, когда первое if является правильным, но когда первое if неверно, также не проверяется внутреннее if. Будет ли работать, если я проверю PID и сделаю или во внешнем if?

Code:
+ [ true ]
+ date +%T
+ Zeit=08:51:00
+ [[ 08:51:00 == 08:51:00 ]]
+ [[ 08:51:02 != 08:51:00 ]]
+ pidof tcpdump
+ [ 9945 ==  ]
+ awk /abfrage2/ && ! /awk/{print $1}
+ ps -eo pid,args
+ pid1=
+ echo
+ sudo kill -9
kill: you need to specify whom to kill
+ echo autodump stopped
autodump stopped

Обновление

Я сам обнаружил некоторые ошибки

Это самый последний код. Он работает почти сейчас, но tcpdump все еще не убивается. Но он уже записывает данные в файл.

    #!/bin/sh
source /media/usbhd-sd[b-d]1/config.conf
pluggedin=true
echo $TIMESTART
echo $TIMEEND
echo $$
echo $Zeit
echo $$ >> /tmp/test.txt
while [ $pluggedin ];do
        Zeit=$(date +"%T")
        if [[ $TIMESTART == $Zeit ]] || [[ "$pid1" != "" ]];then
                if [[ $TIMEEND != $Zeit ]];then
                        if [ "$pid1" == "" ];then
                                echo "tcpdump started"
                                sudo tcpdump -i eth0 -w /media/usbhd-sd[b-c]1/abfrage2.pcap &
                                pid1=$(ps -eo pid,args|awk '/abfrage2/ && ! /awk/{print $1}')
                                #sudo umount /dev/sdb1
                        else
                        echo "Tcpdump already running"
                        fi
                else
                        if [ "$pid" != ""];then
                                echo $pid1 >> /tmp/test.txt
                                sudo kill -9 $pid1
                                echo "autodump stopped"
                        else
                                echo "autodump already stopped"
                        fi
                fi

        else
        echo "tcpdump noch yet started"
        fi
done

Теперь я получаю этот вывод через отладку. Когда время составляет 40 с, PID недоступен:

+ [ true ]
+ date +%T
+ Zeit=10:45:39
+ [[ 10:45:30 == 10:45:39 ]]
+ [[ 30285 !=  ]]
+ [[ 10:45:40 != 10:45:39 ]]
+ [ 30285 ==  ]
+ echo Tcpdump already running
Tcpdump already running
+ [ true ]
+ date +%T
+ Zeit=10:45:40
+ [[ 10:45:30 == 10:45:40 ]]
+ [[ 30285 !=  ]]
+ [[ 10:45:40 != 10:45:40 ]]
+ [  != ]
sh: !=: argument expected
+ echo autodump already stopped
autodump already stopped
0
01.12.2015, 11:53
0 ответов

Теги

Похожие вопросы