Bash, получающий целое выражение, ожидается

Ах я нашел ответ:

sudo pacman -S manjaro-keyring

Обновление ключевого кольца сначала решит проблему выше.

-121--62577-

Ошибка: 3) ОШИБКА cinder.brick.local_dev.lvm Не удается найти тома Cinder группы томов

4) ОШИБКА cinder.backup.manager Ошибка при инициализации драйвера: LVMISCSIDriver

5) ОШИБКА cinder.backup.manager Неверный или неожиданный ответ от API внутреннего тома хранилища: тома Cinder группы томов не существует

Вы проверяете файл/etc/cinder/cinder.confg, и смотрите vloume-group = (любое имя, которое вы создали) то же имя, которое вы создадите в $ vg create (любое имя, которое вы создали) это имя только то, что оно будет работать.

-121--196254-

Это похоже на то, что вы ищете. Проблема, как я вижу, что всегда будет по крайней мере 1 пользователь, который вошел в систему, т.е. тот, который обращается к меню, поэтому вы ищете, когда число пользователей 1.

$ who | awk '{print $1}' | sort -u | wc -l
1

При этом берется результат , который вырезает только первый столбец, т.е. имена пользователей, а затем сортирует его однозначно, а затем подсчитывает.

Но ИМО, это немного сложнее, чем это. Просмотр ситуации таким образом игнорирует, например, если этот пользователь зарегистрировался в сеансах SSH. Таким образом, вы, вероятно, хотите проверить, если выше вывод от кто указывает, что это только : 0 устройств или если есть какие-либо pts/# типов строк.

Примеры

# represents the login for the user's desktop on display :0
saml     :0           2014-12-01 01:56 (:0)

# represents user's terminals or SSH connections
saml     pts/0        2014-12-01 01:57 (:0)

ПРИМЕЧАНИЕ: Обратите внимание на то, как строка pts/0 показывает, с каким дисплеем она связана, «: 0».

Поэтому что-то подобное кажется более подходящим:

num_pts=$(who | grep 'pts/' | wc -l)
num_usr=$(who | awk '{print $1}' | sort -u | wc -l)

if [ $num_pts -eq 0 ] && [ $num_usr -eq 1 ]; then echo "OK to logout";fi

Пример

Вот смоделированный прогон, в котором у меня есть 2 учетные записи:

$ who
saml     :0           2014-12-01 01:56 (:0)
saml     pts/0        2014-12-01 01:57 (:0)
saml     pts/1        2014-12-01 02:13 (:0)
saml     pts/2        2014-12-03 04:22 (:0)
saml     pts/3        2014-12-05 08:14 (:0)
samtest  pts/4        2014-12-05 08:14 (localhost)

Выполнение команд вручную приводит к следующему:

$ echo $num_usr
2
$ echo $num_pts
5
$ if [ $num_pts -eq 0 ] && [ $num_usr -eq 1 ]; then echo "OK to logout";fi
$

Если я вручную задаю переменные 2, однако, чтобы смоделировать, что я вошел в систему «: 0» и не иметь открытых терминалов:

$ num_usr=1
$ num_pts=0
$ if [ $num_pts -eq 0 ] && [ $num_usr -eq 1 ]; then echo "OK to logout";fi
OK to logout

Это может быть сокращено и просто показать вам подход.

0
25.11.2018, 16:42
2 ответа

Проблема в том, что

if [ $usep -ge $ALERT ]; then
  ...
fi

$usep содержит несколько строк из цифр. Чтобы проциклировать их все, вместо этой части используйте нечто подобное:

for $space in $usep;
do
  if [ $space -ge $ALERT ]; then
    echo "Running out of space..."
  fi
done
2
28.01.2020, 02:36

Значение, записанное в переменной $storage , состоит из нескольких строк. В результате $output также будет содержать несколько строк, так же как и $usep.

Вы можете извлечь и сравнить все значения, сохранённые в $usep, по очереди, используя другой для цикла, как упоминалось в ответе на этот вопрос . Или вы можете использовать , в то время как утверждение следующим образом:

echo $storage | while read output
do      
    ...
    ...

    if [ $usep -ge $ALERT ]; then    
    echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)"
  fi
done
0
28.01.2020, 02:36

Теги

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