Вывод команды через переменную в консоль. bash
мне надо вывести команду через переменную в консоль, как это сделать я понимаю:
a=$(uname -r)
echo $a
А если у меня есть несколько команд и мне нужно при запуске скрипта указать, что мне нужно вывести только одну из них, например для вывода только kernel:
./script.sh -k
--------
kernel=5.13.0-28-generic
Или например запустить скрипт с -h для help, как я могу это реализовать? Спасибо!
Ответы (2 шт):
можно взять к примеру шаблон из https://devhints.io/bash (см. Getting options) и немного адаптировать под наши нужды
так выглядит сам шаблон:
while [[ "$1" =~ ^- && ! "$1" == "--" ]]; do case $1 in
-V | --version )
echo $version
exit
;;
-s | --string )
shift; string=$1
;;
-f | --flag )
flag=1
;;
esac; shift; done
if [[ "$1" == '--' ]]; then shift; fi
пример script.sh
#!/usr/bin/env bash
help="Использование: script [ПАРАМЕТР]...
Печатает определенные сведения о системе.
..."
a=$(uname -r)
while [[ "$1" =~ ^- && ! "$1" == "--" ]]; do case $1 in
-h | --help ) echo -e "$help"; exit;;
-k | --kernel ) echo "$a" ; exit;;
esac; shift; done
if [[ "$1" == '--' ]]; then shift; fi
exit
Я бы предложил более простую передачу параметров скрипту c использованием встроенной функции работы с переменными:
#./script.sh
a=$(uname ${@:--r})
echo $a
Как это работает:
${a:-b}
^^||||^ Экранирование переменной с возможностью дополнительной обработки
^||| Наименование переменной
^^| Условие если переменная пустая
^ Значение если предыдущее условие соблюдено
Более подробно можно прочитать тут: gnu.org
Из чего следует, что если не передавать параметр(ы) скрипту, то по умолчанию подставится параметр -r
(bash -x это дебаг режим выполнения скрипта)
# bash -x ./script.sh
++ uname -r #сформированная команда
5.4.0-1093-gcp #результат выполнения
Если скрипту передать параметр или несколько параметров то в обработку попадут именно они:
# bash -x ./script.sh -p -o
++ uname -p -o #сформированная команда
x86_64 GNU/Linux #результат выполнения