Вы не можете заставить скрипт видеть другое значение для $test
, чем test1
, учитывая способ написания вашего скрипта в настоящее время (он безоговорочно присваивает строку test1
переменной, а затем печатает ее ). Поиск скрипта не поможет. Единственное, что может сделать сценарий, — это установить для переменной test
значение test1
в текущей среде, независимо от ее предыдущего значения.
Вы можете сделать так, чтобы ваш скрипт имел значение по умолчанию , которое переопределялось, задав скрипту аргумент командной строки.
В простейшем случае это может выглядеть так
#!/bin/sh
value=${1:-test1}
printf 'value is %s\n' "$value"
Я избегаю использовать имя test
для переменной, так как это также имя стандартной утилиты. Не то чтобы это вызывало проблемы, но это делает код менее двусмысленным для чтения. Я также использую /bin/sh
, а не bash
в строке #!
-, так как скрипт не использует никаких специфических функций bash
-. Тем не менее, он по-прежнему будет выполняться bash
, а также ksh
, yash
, zsh
и любой другой оболочкой POSIX.
Это установит значение переменной value
равным любому первому аргументу командной строки, если только он не был предоставлен, и в этом случае он устанавливается в строку test1
. ${parameter:-word}
— это стандартная замена параметра, которая расширяется до word
, если $parameter
является пустой строкой или если эта переменная не установлена.
Тестирование:
$./script.sh
value is test1
$./script.sh hello
value is hello
Разрешение сценарию использовать опцию, -v
,который принимает одну опцию -аргумент:
#!/bin/sh
value=test1
while getopts 'v:' opt; do
case $opt in
v) value=$OPTARG ;;
*) echo 'error in command line parsing' >&2
exit 1
esac
done
# not needed if you're not expecting operands after the options
# on the command line:
shift "$(( OPTIND - 1 ))"
printf 'value is %s\n' "$value"
Тестирование последнего скрипта:
$./script.sh
value is test1
$./script.sh -v hello
value is hello
По понятным причинам с клиента вы не можете получить доступ к файлам, кроме тех, которые настроены для обмена с вами сервером.
Но если у вас есть контроль над сервером SMB, вы можете установить опцию wide links = Yes
в его конфигурационном файле. Хотя не рекомендуется.