TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #237 1.41K
Создаем CLI-подобные скрипты с флагами и аргументами

Когда скрипт обрастает опциями (-f, -o, -v и т.д.), его удобно превратить в "настоящую CLI-утилиту". Для этого существует встроенный инструмент - getopts.

getopts - это встроенная функция bash для парсинга коротких флагов (-a, -b value) по POSIX-стандарту.

📱 Пример: скрипт с флагами


#!/bin/bash

usage() {
echo "Usage: $0 [-f файл] [-v]"
exit 1
}

verbose=0
file=""

while getopts ":f:v" opt; do
case $opt in
f) file="$OPTARG" ;;
v) verbose=1 ;;
\?) echo "Invalid option: -$OPTARG" >&2; usage ;;
🙂 echo "Option -$OPTARG requires an argument." >&2; usage ;;
esac
done


🌟 Как это работает?

getopts ":f:v":

: в начале - включает ручную обработку ошибок.
f: - опция -f ожидает аргумент ($OPTARG).
v - флаг без аргумента.


Внутри case ты обрабатываешь каждый флаг.
Остаток ($@) можно анализировать после shift $((OPTIND - 1)).

🧑‍💻 Пример запуска:


./myscript.sh -f /tmp/data.txt -v


🌟 Советы:

1. getopts не поддерживает длинные флаги (--file), только короткие (-f). Для более сложных CLI можно использовать getopt (внешняя утилита) или перейти на Python/Go.
2. Не забывай делать usage и проверки на обязательные параметры.
3. Удобно использовать шаблон shift $((OPTIND - 1)) после парсинга, чтобы работать с позиционными аргументами.


⭐️ Мини-шаблон CLI:


#!/bin/bash
while getopts ":u:p:h" opt; do
case $opt in
u) user=$OPTARG ;;
p) pass=$OPTARG ;;
h) echo "Usage: $0 -u user -p pass"; exit 0 ;;
*) echo "Invalid option"; exit 1 ;;
esac
done


BashTex 📱 #bash #utils
  • 👍 20
More from @bash_tex
  1. Oct 13, 2026openat2(): как Linux защищает от выхода за пределы каталога Допустим, приложение должно чи…
  2. Oct 12, 2026xargs против while read: где быстрее и безопаснее Обе конструкции позволяют обработать спи…
  3. Oct 9, 2026BashTex 📱 #мем
  4. Oct 8, 2026Bridge FDB - как Linux bridge узнаёт, где находится MAC Linux bridge не знает заранее, за…
  5. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  6. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
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 →