The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Является ли скрипт корректным?"
Отправлено skb7, 19-Авг-13 16:35 
> Можно ли сравнивать  сначала сроку, потом числа?
> [ "$A" != "возмущено" -a "$cattt" -eq "1" ];

Да, можно.


$ help test | grep AND
      EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.

Не важно, строки вы сравниваете или числа, -- и то, и то -- выражения, так что всё ок.

Можно и так, как вы сделали (в контексте test), а можно средствами баша:

1. [ $x != "abc" -a $y -eq 2 ]
2. [ $x != "abc" ] && [ $y -eq 2 ]

Эти выражения делают одно и то же.

> может, проще добавить логическое "и" для проверки.
> Или это хуже?

Ну, если так сильно углубляться...

1. Я бы переделал этот кусок кода:


if [ "$A" = "возмущено" -a "$cattt" -eq "0" ]; then
    echo "1" > $var_file
     notif
fi

if [ "$A" != "возмущено" -a "$cattt" -eq "1" ]; then
    echo "0" > $var_file
     notif
fi

таким образом:


if [ "$A" = "возмущено" ]; then
    if [ $cattt -eq 0 ]; then
        echo 1 > $var_file
        notif
    fi
else
    if [ $cattt -eq 1 ]; then
        echo 0 > $var_file
        notif
    fi
fi

Лучше тем, что будет делаться меньше проверок. У вас будет выполняться 4 проверки, а у меня 2. Плюс я избавился от ненужных кавычек.

2. Еще вот этот кусок кода переделал бы:


if [ "$A" = "возмущено" ]; then
    echo "Attention! Magnetic Storm" | festival --tts
      
fi
  if [ "$A" != "возмущено" ]; then
   echo "There is no anymore" | festival --tts
  
fi

на такой:


if [ "$A" = "возмущено" ]; then
    echo "Attention! Magnetic Storm" | festival --tts
else
    echo "There is no anymore" | festival --tts
fi

...или даже на такой:


if [ "$A" = "возмущено" ]; then
    msg="Attention! Magnetic Storm"
else
    msg="There is no anymore"
fi

echo $msg | festival --tts

> что означает flock?

flock -- блокировка с помощью файла. Такой себе аналог мьютекса. Используется, если вы подозреваете, что скрипт может быть выполнен одновременно из нескольких параллельных потоков (процессов), чтобы избежать race conditions.

Суть в том, что каждый раз при выполнении скрипта команда flock проверяет, существует ли lock-файл;
1. если не существует -- создается такой файл и выполняется код, защищенный этим локом
2. если существует -- команда flock будет ждать, пока lock-файл исчезнет (т.е. этот скрипт, выполняющийся в другом потоке, закончит выполнять защищенный локом код и удалит lock-файл), и потом продолжит выполнять код скрипта (защищенный flock). С помощью параметров также можно задать поведение: например, ждать с таймаутом, а потом завершать скрипт, либо просто сразу завершать скрипт.

Чтобы понять, как работает flock, можете проделать следующий эксперимент:
1. В одном терминале запустите команду


flock /tmp/123 -c 'while :; do sleep 1; done'

2. В другом терминале запустите команду

flock /tmp/123 -c 'echo 1'

- flock во втором терминале будет "висеть" и ждать, пока файл /tmp/123 удалится
- файл /tmp/123 удалится тогда, когда завершиться flock в первом терминале
- а в первом терминале под локом выполняется бесконечный цикл
3. Теперь нажмите Ctrl+C в первом терминале, чтобы завершить первый flock
4. Во втором терминале сразу же выполнится команда "echo 1".
 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру