Можно настроить управление питанием с
hdparm -B $value /dev/sdx
Помещенный это, например, в /etc/init.d/boot.local
Заключение в кавычки страницы справочника:
Низкая стоимость означает агрессивное управление питанием, и высокое значение означает лучшую производительность. Возможные настройки колеблются от значений 1 - 127 (которые разрешают вращение вниз), и оценивает 128 - 254 (которые не разрешают вращение - вниз). Самая высокая степень управления питанием достигнута с установкой 1, и самая высокая производительность ввода-вывода с установкой 254. Значение 255 говорит hdparm отключать Усовершенствованное Управление питанием в целом на диске (не вся поддержка дисков, запрещающая его, но большинство делает).
Добавьте корпус по умолчанию:
case $price in
[0-9] | "." | "$") true
;;
*)
do-something
;;
esac
Для сопоставления строки, содержащей только одно, положительное целое число с помощью корпуса Case
Заявление, которое вы можете сделать:
case "${string:--}" in
(*[!0-9]*)
! echo 'Invalid value for $string!';;
(*[!0]*)
echo "$string is a positive integer greater than 0.";;
(*)
echo "$string is 0.";;
esac
в первом Case
I Экран для любого значения $ {String: -}
расширение, которое содержит даже один символ, который не является одним из 0123456789
. В мероприятии $ String
либо unset, либо NULL он расширится на -
и поэтому все еще совпадает с этим шаблоном. Ведущий !
Инверты return
return (который всегда 0) до 1 - и поэтому корпус
построить возврат 1, если $ String
содержит неверное значение.
В следующем соответствующем любое значение $ String
, содержащее одну цифру, которая не составляет 0 - и поэтому любое количество ведущих 0s на любое допустимое значение для $ String
будет соответствовать как положительное число.
Последние матчи, которые не соответствовали предыдущему двору, - это означает, что он соответствует только одному или нескольким 0s.
Этот ответ относится не к уже объясненной проблеме случая
, а к проблеме соответствия.
Сначала нам нужно определить, как могут выглядеть валидные строки. Самое простое определение, конечно, допускает только одну структуру типа
00
)В качестве регулярного выражения (для e. g. grep
, см. man 7 regex
) это будет написано так:
^[0-9]+\.[0-9][0-9]\$$
^
отмечает начало строки, т.е. перед [0-9]+
\.
для того, чтобы считаться буквальной точкой \$
для того, чтобы считаться буквальным $
обозначает конец строки, т.е. после литерала $
Testing:
> echo '0123.45$' | grep -E '^[0-9]+\.[0-9][0-9]\$$'
0123.45$
Если определение изменено таким образом, что и точка с трейлинговыми цифрами, и знак доллара являются необязательными, то регекс изменится на
^[0-9]+(\.[0-9][0-9])?\$?$
Testing:
> echo '0123$' | grep -E '^[0-9]+\.[0-9][0-9]\$$'
# no match
> echo '0123$' | grep -E '^[0-9]+(\.[0-9][0-9])?\$?$'
0123$
> echo '0123.45$' | grep -E '^[0-9]+(\.[0-9][0-9])?\$?$'
0123.45$
Оболочка может работать с регулярными выражениями напрямую, но не в рамках шаблонов case
. Вам нужна структура [[]]
. Но так как вы хотите знать только соответствует строка или нет, то нет причин использовать case
:
if [[ "$price" =~ ^[0-9]+(\.[0-9][0-9])?\$?$ ]]; then
:
else
:
fi
Если вам действительно нужен case
, то вы можете установить опцию extglob
с помощью булитина оболочки shopt
и переписать регекс в "shell regex":
shopt -s extglob
^[0-9]+(\. [0-9][0-9])?\$?$
становится тогда
+([0-9])?(.[0-9][0-9])?($)
ведущим $
, если вы хотите $0123.45
вместо 0123. 45$
тогда вы, очевидно, должны поставить чек на $
в начале:
grep
/[[ ]]
: ^\$?[0-9]+(\.[0-9][0-9])?$
?($)+([0-9])?(.[0-9][0-9])
более простая проверка
Если вас не волнует порядок, а только правильные символы, то вы можете использовать гораздо более простые выражения:
grep
/[[ ]]
: ^[0-9.$]+$
+([0-9.$])
пример
#! /bin/bash
shopt -s extglob
for value in 1234 1234EUR; do
case "$value" in
+([0-9]))
echo "value OK: '${value}'"
;;
*)
echo "value not OK: '${value}'"
;;
esac
done