У меня есть сценарий для запуска некоторых проверок на машине Ubuntu.Bash getopt - shift multiple parameters
Я называю мой сценарий, как это: ./script -f /tmp/file.txt --modules 001 002 003
Все файлы 001, 002, и т.д. ... это Баш скрипты.
Следующая основная функция заключается моя проблема:
main() {
OPTS=`getopt -o hf:m: --long help,file:,modules: -n 'script.sh' -- "[email protected]"`
eval set -- "$OPTS"
[ $# -eq 0 ] && echo "Unknown options or parameters" && USAGE
while [ $# -gt 0 ]; do
case "$1" in
-f|--file)
FILE="$2"
shift
;;
-h|--help)
USAGE
exit 1
;;
-m|--modules)
MODULES="$2"
shift
;;
esac
shift
done
[ -z "$MODULES" ] && echo "No module specified" && USAGE
}
Я бы, что переменные $ МОДУЛЕЙ содержит, например 001 002 004
.
Я пробовал разные вещи со сменой, но это сложно ..
В идеале, если я могу использовать «$ @» в качестве остальных параметров скрипта, это может быть здорово.
EDIT: с ./script.sh -f /tmp/file.txt --modules "001 002 003"
, наконец, переменная $ MODULES содержит, например, «001 002 003».
Но у меня есть цикл for, который, кажется, не перебирает все аргументы, только на первом ... каждый $module
содержит «001 002 003».
for module in "$MODULES"; do
echo "Importing Module $module"
. modules/$module >> "$FILE"
done
вы должны выяснить what't разница между ссылкой на переменную и оставить его без кавычек с 'для мод в«$ МОДУЛИ»', вы только когда-либо будет иметь одну итерацию цикла.. С 'для мод в «$ MODULES» ', вы разрешаете оболочке выполнять [разделение слов] (https://www.gnu.org/software/bash/manual/bashref.html#Word-Splitting) (и [расширение имени файла] (https : //www.gnu.org/software/bash/manual/bashref.html#Filename-Expansion)!) по значению переменной, поэтому вы будете иметь несколько итераций через цикл. [Будьте осторожны, хотя] (http://unix.stackexchange.com/q/171346/4667) –
Мне кажется, мне нужно использовать список (а не переменную), но я не вижу, как создать список в моем Случай' цикл. – Isador
Вы бы сделали: 'set -f; модули = ($ 2); set + f' - - команды команд отключить/включить расширение имени файла –