Спите определенные разделы сценария

Предполагая, что файловые системы и точки монтирования не содержат пробелов, попробуйте:

df -hP | awk 'NR>1 { $1=$6="" ; print }' | column -t

df -hP выводит статистику файловой системы без разрывов строк для длинных имен файловых систем.

awk 'NR> 1 {...}' ограничивает данное действие 2-й и последующими строками, чтобы пропустить строку заголовка df ...

awk -действие {$ 1 = $ 6 = ""; print} обнуляет ненужные поля и печатает остальные.

Использование {print $ 2, $ 3, $ 4, $ 5} сделает то же самое.

column -t упорядочивает весь вывод как чистую таблицу.


$ cat x
#!/bin/sh
echo '<testing inside a script>'
df -hP | awk 'NR>1 { $1=$6="" ; print }' | column -t
echo '</testing inside a script>'
$ chmod +x x
$ ./x
<testing inside a script>
71G    39G   29G    58%
1006M  0     1006M  0%
10M    208K  9,8M   3%
1006M  0     1006M  0%
</testing inside a script>
$ _

(Я удалю это снова, когда проблема, упомянутая в комментариях, будет решена ...)

1
03.01.2019, 15:53
2 ответа
#!/bin/bash
#again you must use bash... 
valid[0]=160650648 ; valid[1]=163686025
valid[2]=120806542 ; valid[3]=37206841
i=0

while sleep 5;  do
    scan=$(./RFSniffer)
    if [ "$scan" == "$oldscan" ]; then
    i=$((i+1))
    #if i is minor than 10 restart loop...
    #So a alert will not be displayed again after 50 seconds...
        if [ "$i" -lt "10" ]; then
            continue
        else 
            i=0
        fi
    fi

    case $scan in 
           ${valid[0]})
               echo "Good Read"
               echo "Your code is " $scan
              ./buzzer.sh &
               omxplayer -o local sleighbells.mp3
               curl -u "code": https://api.pushbullet.com/v2/pushes -d type=note -d title="Alert" -d body="DoorBell" &
            ;; 
            ${valid[1]})
                curl -u "code": https://api.pushbullet.com/v2/pushes -d type=note -d title="Alert" -d body="front sensor" &
            ;;
            ${valid[2]})
                curl -u "code": https://api.pushbullet.com/v2/pushes -d type=note -d title="Alert" -d body="Back door sensor" &
            ;;
            ${valid[3]})
                curl -u "code": https://api.pushbullet.com/v2/pushes -d type=note -d title="Alert" -d body="Second sensor" &
            ;;
            *)
               echo "BAD READ:  your code and the valid don't match"
               echo "Your correct valid code should be " $scan
            ;;
    esac

    oldscan=$scan
    scan=''
    #sleep 5 not needed sleep 5 is in while condition 

done

РЕДАКТИРОВАТЬ :см. комментарии..

0
28.01.2020, 00:21

Правильно ли я перефразирую «Сценарий должен независимо доставлять прочитанные сканирования, но блокировать каждое сканирование после его появления в течение одной минуты»?

В вашем сценарии есть некоторые возможности для упрощения/оптимизации, и я предполагаю, что вы используете отредактированный тегbash(hoppla -bash...? )несмотря на шебанг, указывающий на другое... Таким образом, реализуя одноминутную паузу для отдельных сканирований, я попытался также воспользоваться возможностями, (используя echoдля команд, не установленных в моей системе -удалить, если доволен работой ). Попробуйте это и не стесняйтесь адаптировать:

VALID=(160650648 163686025 120806542 37206841)                          # define valid scans
BODY=(DoorBell "front sensor" "Back door sensor" "Second sensor")       # define body tests

while true
  do    scan=$(./RFSniffer)

        for IX in "${!VALID[@]}" "${#VALID[@]}"                         # 0 - 3 elements, and 4 to identify bad reads
          do    if [ "${scan:-FALSE}" = "${VALID[IX]}" ]                # compare 4 elements, the 5. tries to compare to "" empty
                  then  echo "Good Read"
                        echo "Your code is " $scan

                        if (( $SECONDS > ${LAST[IX]} + 60 ))            # test for one minute pause
                          then  if [ "$IX" = 0 ]                        # do this just for the "door bell"
                                  then  echo./buzzer.sh
                                        echo omxplayer -o local sleighbells.mp3
                                fi

                                echo curl -u "code": https://api.pushbullet.com/v2/pushes -d type=note -d title="Alert" -d body="${BODY[IX]}" # &

                                LAST[IX]=$SECONDS                       # keep last scan occurrence
                          else  echo "pausing "                         
                        fi

                        break                                           # if good read - break out of the for loop to avoid the bad read msg
                fi

                if [ "$IX" = "${#VALID[@]}" ]                           # the fifth loop means no valid scan found

                  then  echo "BAD READ:  your code $scan and the valid ones don't match"
                        echo "Your correct valid code should be one of ${VALID[@]}"
                fi
          done

        sleep 5
  done
0
28.01.2020, 00:21

Теги

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