Как видите, процесс redis выполняется в собственном «пространстве имен монтирования» с параметром только для чтения.
Redis proc started by Systemd [/proc/15920/ns/mnt] -> mnt:[4026532343]
your shell [/proc/7138/ns/mnt] -> mnt:[4026531840]
Посмотрите на модуль systemd для параметров запуска и обновления redis-server
, связанных с флагами монтирования, в соответствии с вашими потребностями.
Посмотрев на файл модуля systemd redis-server, я вижу настройки ниже
# grep -i readwrite /etc/systemd/system/redis.service
ReadWriteDirectories=-/var/lib/redis
ReadWriteDirectories=-/var/log/redis
ReadWriteDirectories=-/var/run/redis
ReadWriteDirectories=-/etc/redis
, поэтому вы можете добавить / myraid0 в качестве дополнительных ReadWriteDirectories
и перезапустить службу redis
Вы можете сопоставить значение с диапазоном, а затем используйте порядковый номер этого диапазона в операторе case
:
cmil_limits=(320 404 510 642)
index=0
for limit in "${cmil_limits[@]}"
do
if [ "$cmils" -lt "$limit" ]
then
break
fi
((index++))
done
case "$index" in
0) # < 320
cawg="??"
;;
1) # 320-403
cawg="25 AWG"
;;
2) # 404-509
cawg="24 AWG"
;;
3) # 510-641
cawg="23 AWG"
;;
4) # > 641
cawg="??"
;;
esac
Если $cmils
меньше 320, мы выходим из цикла for
на его первой итерации,с index=0
. Если $cmils
равно ≮ 320 (, т. е. ≥ 320 ), мы увеличиваемindex
(→1
)и переходим к следующей итерации. Затем, если $cmils
< 404 (, т. е. ≤ 403, при условии, что это целое число ), мы выходим из цикла с помощью index=1
. И так далее. Если $cmils
равно ≮ 642, это ≥ 642 и, следовательно, > 641, поэтому мы доходим до конца цикла for
и получаем index=4
.
Это имеет то преимущество, что значения отсечки сохраняются вместе, все на одной линии, и вам не нужно поддерживать избыточные номера (например, ваш текущий код и код одного другого ответа перечисляют и 403 , и 404, и и 509 и 510 — что избыточно, и больше работы для поддержания, если цифры когда-либо изменятся. Я не знаю, является ли это настоящей -мировой заботой.)
cmil_limits
— это массив. bash, ksh и некоторые другие оболочки поддерживают массивы, а некоторые нет. Если вам нужно сделать что-то подобное в оболочке, которая не поддерживает массивы, вы можете просто поместить список прямо в оператор for
:
for limit in 320 404 510 642
do
︙
или используйте список параметров оболочки в виде массива:
set -- 320 404 510 642
for limit in "$@"
do
︙
Некоторые оболочки позволяют сокращать приведенное выше:
set -- 320 404 510 642
for limit
do
︙
((…))
арифметика также является башизмом (как let
высказывание ). Если вам нужно сделать что-то подобное в оболочке который не поддерживает ((…))
арифметику, вы можете заменить
((index++))
Оператор (для увеличенияindex
)на
index=$(expr "$index" + 1)
Обратите внимание, что пробелы до и после +
обязательны.
case $cmils in
3[2-9][0-9]|40[0-3])
cawg="25 AWG"
;;
40[4-9]|4[1-9][0-9]|50[0-9])
cawg="24 AWG"
;;
51[0-9]|6[0-3][0-9]|64[01])
cawg="23 AWG"
;;
Поскольку вы ищете арифметические тесты, а регистр не выполняет арифметические действия, if-then
кажется естественным подходом:
if [ "$cmils" -lt 320 ]
then
cawg="??"
elif [ "$cmils" -le 403 ]
then
cawg="25 AWG"
elif [ "$cmils" -le 509 ]
then
cawg="24 AWG"
elif [ "$cmils" -le 641 ]
then
cawg="23 AWG"
fi
Я предпочитаю портативные решения, но некоторым нравится арифметический синтаксис bash:
if ((cmils < 320))
then
cawg="??"
elif ((cmils <= 403))
then
cawg="25 AWG"
elif ((cmils <= 509))
then
cawg="24 AWG"
elif ((cmils <= 641))
then
cawg="23 AWG"
fi
Этот синтаксис более мощный и более хрупкий, чем синтаксис POSIX. Чтобы понять почему, попробуйте этот код после установки cmils=cmils
.
Как уже говорили другие, case
не поддерживает операторы сравнения, только сопоставление с шаблоном.
Однако вы можете сделать набор операторов if/elif/fi более похожим на оператор case , отформатировав его по-другому. например, на основе ответа John1024:
if [ "$cmils" -lt 320 ]; then cawg='??'
elif [ "$cmils" -le 403 ]; then cawg='25 AWG'
elif [ "$cmils" -le 509 ]; then cawg='24 AWG'
elif [ "$cmils" -le 641 ]; then cawg='23 AWG'
fi
или даже:
[ "$cmils" -ge 320 ] && [ "$cmills" -le 403 ] && cawg='25 AWG'
[ "$cmils" -ge 404 ] && [ "$cmills" -le 509 ] && cawg='24 AWG'
[ "$cmils" -ge 510 ] && [ "$cmills" -le 641 ] && cawg='23 AWG'
ПРИМЕЧАНИЕ.:в отличие от всего, что использует elif
, этот вариант имеет тот недостаток, что выполняется по крайней мере первая проверка каждой из этих строк. Использование elif
пропустит все оставшиеся тесты после того, как любой тест будет оценен как истинный. Вы можете поместить что-то подобное в функцию и добавить && return
после установки cawg
.
Я лично нахожу любой из них гораздо более читабельным (без всех дополнительных переводов строки и чередующихся отступов, загромождающих вещи ), но мнения сильно различаются по этому конкретному -вопросу стиля кодирования/отступа:)
Когда все выстраивается в одни и те же (или очень близкие )столбцы, их также легче копировать, вставлять и редактировать. Что хорошо при использовании одного настоящего редактора.