Эхо-отфильтрованные числа в цикле for и с оператором if

Думаю, я выяснил то, что работает.

Я использовал программу под названием LaunchControl , чтобы создать файл под названием Включить Core Dump.plist в / Система / Библиотека / Launchdemons со следующим содержимым:





    GroupName
    wheel
    InitGroups
    
    Label
    core dumps launchctl
    ProgramArguments
    
        launchctl
        limit
        core
        unlimited
        unlimited
    
    RunAtLoad
    
    UserName
    root


С этими разрешениями:

$ ls -al enable\ core\ dumps.plist 
-rw-r--r--  1 root  wheel  582 Dec 30 15:38 enable core dumps.plist

, и это, казалось, сделали трюк:

$ launchctl limit core
    core        unlimited      unlimited 
$ ulimit -a core
core file size          (blocks, -c) unlimited
...

...

Я создал небольшую тестовую программу, которая просто падает:

$ ./a.out 
Segmentation fault: 11 (core dumped)

и, VOILA, сформирована ядра сброса:

$ # ls -al /cores/
total 895856
drwxrwxr-t@  3 root  admin        102 Dec 30 15:55 .
drwxr-xr-x  31 root  wheel       1122 Oct 18 10:32 ..
-r--------   1 root  admin  458678272 Dec 30 15:55 core.426

-121-----45986-

Пространства не допускаются вокруг = !

Итак:

#!/bin/bash
ping -c 20 google.com > results.txt
packetloss=$(awk '/packet loss/{print $6}' results.txt)
echo "$packetloss" >> debug.txt

или даже более короткий:

ping -c 20 google.com |
    awk '/packet loss/{sub(/%/, "");print $6 >> "debug.txt"}'

Примечание:

  • Нет необходимости назначать переменную x ; Вы можете распечатать $ 6 напрямую.
  • Сам awk может создавать новые файлы с его выходом
  • Назовителем
     `
    используется в подстановке команд старого стиля, например:
foo=`command`

Foo = $ (команда) вместо этого рекомендуется синтаксис. Обращение с обратной косой чертой внутри $ () менее удивительно, а $ () легче вводиться.

Проверка http://mywiki.woolegege.org/bashfaq/082

Дополнительное решение Perl :

ping -c 20 google.com |
    perl -lne '/(\d+)%\s+packet\s+loss/ and print $1' >> debug.txt

0
13.10.2015, 19:59
3 ответа

Пробелы и -gt

user1@machine:~/tmp$ for i in {1..10}; do if  [ $i -gt 5 ]; then echo $i; fi; done
6
7
8
9
10
1
28.01.2020, 02:49

Если вы имеете дело исключительно с целыми числами, вы также можете использовать арифметическое расширение bash :

$ for i in {1..10}; do if ((i>5)); then echo $i; fi; done
6
7
8
9
10
$ 
0
28.01.2020, 02:49
i=0
while case $((i+=1)) in
      ([6-9])
          echo "$i";;
      (??)
          ! echo "$i"
      esac
do :; done
0
28.01.2020, 02:49

Теги

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