TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #336 1.17K
Бинарные флаги и побитовые операции

Bash - не только про строки. В нtм легко использовать побитовую арифметику (&, |, ^, ~, <<, >>) для управления флагами, что бывает полезно в админских скриптах.

▪️ Базовая логика. Каждый бит числа можно трактовать как флаг (0 - выключено, 1 - включено):


FLAG_READ=1 # 0001
FLAG_WRITE=2 # 0010
FLAG_EXEC=4 # 0100
FLAG_DELETE=8 # 1000


▪️ Установка флага (OR |)


rights=0
rights=$(( rights | FLAG_READ | FLAG_WRITE ))
echo $rights # 3 (0001 + 0010 = 0011)


▪️ Проверка флага (AND &)


if (( rights & FLAG_WRITE )); then
echo "Есть право записи"
fi


▪️ Сброс флага (AND + NOT &~)


rights=$(( rights & ~FLAG_READ ))
echo $rights # теперь без read


▪️ Инверсия (XOR ^)


rights=$(( rights ^ FLAG_EXEC )) # переключение: если был - уберется, если не был - включится


▪️ Практические кейсы
1️⃣ Система разрешений в скриптах. Можно задавать доступ к операциям через биты вместо кучи if:


if (( user_flags & FLAG_DELETE )); then
rm "$file"
fi


2️⃣ Упаковка нескольких состояний в одно число. Например, код статуса сервиса:


STATUS_RUNNING=1
STATUS_RESTARTING=2
STATUS_FAILED=4

status=$(( STATUS_RUNNING | STATUS_RESTARTING ))

(( status & STATUS_FAILED )) && echo "Ошибка!"


3️⃣ Быстрые флаги для CLI-опций


OPT_VERBOSE=1
OPT_DRYRUN=2
OPT_FORCE=4

opts=0
[[ $1 == "-v" ]] && opts=$(( opts | OPT_VERBOSE ))
[[ $1 == "-f" ]] && opts=$(( opts | OPT_FORCE ))

(( opts & OPT_VERBOSE )) && echo "[VERBOSE MODE]"


4️⃣ Флаги как компактная замена массивов. Вместо массива enabled_features=(...) можно хранить все в одной переменной. Это особенно ценно при передаче значений между процессами.

BashTex 📱 #bash #utils
  • 👍 10
More from @bash_tex
  1. Oct 9, 2026BashTex 📱 #мем
  2. Oct 8, 2026Bridge FDB - как Linux bridge узнаёт, где находится MAC Linux bridge не знает заранее, за…
  3. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  4. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  5. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  6. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →