Я не привожу реальный пример, поскольку сообщение становится настолько длинным, что его никто не прочитает. Поэтому я приведу другие примеры
У меня есть сценарий bash name.sh, и он запрограммирован следующим образом-
#!/bin/bash
echo "Please Enter your name"
read name
echo "Hello $name"
sudo bash age.sh
И еще один сценарий (скажем, age.sh), подобный этому-
#!/bin/bash
*echo "Hello $name"
echo "Please enter your age"
read age
echo "Thank you"
* Здесь во втором скрипт Я хочу, чтобы переменная $ name из первого скрипта использовалась с тем же значением во втором скрипте, чтобы пользователю не приходилось снова вводить свое имя
Конечно, если я объявляю переменную, я может сделать это и в другом скрипте, но если пользователь объявляет это, я не могу предсказать, что пользователь ответит. Так как мне передать то же значение в другой сценарий?
У меня есть другая идея сделать это
Это выглядит примерно так-
#!/bin/bash
echo "Please Enter your name"
read name
echo "Hello $name"
sudo bash age.sh --variable_value
Каким-то образом я могу сделать 2-й сценарий использует значения, указанные после - и присваивает им те же переменные?
Есть по крайней мере два подхода, которые вы можете использовать:
Передать переменную в качестве позиционного параметра сценарию:
./script.sh $VARIABLE
Экспортировать переменную, чтобы вложенные оболочки могли ее использовать:
export VARIABLE
./script.sh
Допустим, в обычном случае, когда вы запускаете скрипт из другого скрипта или, возможно, более правильно из командной оболочки, субъект скрипта вызывает подпрограмму.
Вот пример с двумя скриптами под названиями master.sh
и slave.sh
:
$ cat master.sh
#!/bin/bash
echo "Please Enter your name"
read THE_NAME
./slave.sh "$THE_NAME"
$ cat slave.sh
#!/bin/bash
# Test whether the $NAME is provided in some way. If not ask the user for the value.
if [[ -z $THE_NAME || $THE_NAME = '' ]]; then THE_NAME="$1"; fi
if [[ -z $THE_NAME || $THE_NAME = '' ]]; then echo "Please provide your name"; read THE_NAME; fi
echo "Your name is: ${THE_NAME}"
$ ./slave.sh
Please provide your name
SPAS Z. SPASOV
Your name is: SPAS Z. SPASOV
$ THE_NAME=Spas
$ export THE_NAME
$ ./slave.sh
Your name is: Spas
$ ./master.sh
Please Enter your name
Spas Spasov
Your name is: Spas Spasov
Экспортируйте переменную в вызывающем скрипте:
read name
export name="$name"
Таким образом, переменная будет распространяться на любой вызываемый скрипт и подоболки.
Для извлечения параметров командной строки в скрипте используйте переменные "$1", "$2", ... Они заполняются различными аргументами, переданными команде. "$0" получит имя самой команды, "$@" получит всю строку параметра сразу.