Условия не проверяются должным образом - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть этот скрипт, который запускается каждый раз, когда моя машина с Ubuntu просыпается и идет спать.

#!/bin/sh
if [ "${1}" == "pre" ]; then
  # Do the thing you want before suspend here, e.g.:
  echo "we are suspending at $(date)..." > /home/albin/stuff/suspend_test
elif [ "${1}" == "post" ]; then
  # Do the thing you want after resume here, e.g.:
  echo "...and we are back from $(date)" >> /home/albin/stuff/suspend_test
else
  echo ".2..neither pre or post . $1 .   $(date)" >> /home/albin/stuff/suspend_test
fi

Это найдено в выходном файле:

.2..neither pre or post . pre .   tis 11 sep 2018 20:44:42 CEST
.2..neither pre or post . post .   tis 11 sep 2018 20:45:06 CEST
.2..neither pre or post . pre .   tis 11 sep 2018 22:12:52 CEST
.2..neither pre or post . post .   ons 12 sep 2018 06:55:21 CEST
.2..neither pre or post . pre .   ons 12 sep 2018 06:55:22 CEST
.2..neither pre or post . post .   ons 12 sep 2018 06:55:43 CEST
.2..neither pre or post . pre .   ons 12 sep 2018 07:13:28 CEST
.2..neither pre or post . post .   ons 12 sep 2018 07:14:00 CEST

Я проверил несколько руководств по написанию условных выражений bash, не обнаружив проблем. Переменная $ 1 доступна, но игнорируется в операторах if

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Вероятно, вызывающая сторона этого скрипта передает вам другие аргументы, кроме post или pre.Измените запись в журнале, чтобы использовать >> вместо> (чтобы предотвратить постоянную перезапись журнала) и попробуйте добавить в первую строку echo «$ {1}» >> log, после чего вы сможете увидеть, какие аргументы вы получили в своем скрипте

0 голосов
/ 12 сентября 2018

Вы используете == вместо = внутри [ ], но это чушь.Последние версии Ubuntu используют dash в качестве / bin / sh, и он не поддерживает ==;он получает ошибку, которая интерпретируется как провал теста:

$ if [ foo == foo ]; then echo "The strings match"; else echo "The strings do *not* match"; fi
dash: 1: [: foo: unexpected operator
The strings do *not* match

Решение: переключитесь на =

$ if [ foo = foo ]; then echo "The strings match"; else echo "The strings do *not* match"; fi
The strings match

Если вы собираетесь использовать /bin/sh вместо/bin/bash, вам действительно нужно остерегаться нападок.Об этом есть хорошая страница в вики Ubuntu .Либо так, либо переключитесь на /bin/bash.

Ps. Если вы собираетесь использовать расширения bash, я бы рекомендовал использовать [[ ]] вместо [ ] для условных выражений - это исправляет большинство проблем.синтаксические странности [ ] и добавляет некоторые полезные новые возможности, такие как сопоставление с шаблоном и регулярным выражением.

0 голосов
/ 12 сентября 2018

Скорее всего, я думаю, что вы неправильно указали вывод перенаправления в строке 4.

Должно быть:

echo "we are suspending at $(date)..." >> /home/albin/stuff/suspend_test

вместо

echo "we are suspending at $(date)..." > /home/albin/stuff/suspend_test

Кроме того, я думаю, что 1 доллар не равен ни pre, ни post. Судя по выводу, который вы разместили, я не могу понять, почему эти строки "tis" и "ons" произошли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...