Сценарий оболочки Bash с $1 в качестве переменной с подстановочными знаками

Чтобы запустить виртуальный бокс, вам нужно загрузить в ядро ​​несколько модулей. Либо у вас есть бинарные модули, соответствующие вашему ядру, либо вы можете скомпилировать их из исходного кода, соответствующего вашему ядру. Похоже, у вас нет модулей, и их компиляция либо не удалась, либо не предпринималась попыток.

В моей системе драйверы компилируются с

/usr/lib/virtualbox/vboxdrv.sh setup

Запустите эту команду вручную и посмотрите, что может быть не так.

1
28.07.2020, 02:01
2 ответа

Дело в том, что шаблон подстановочных знаков расширяется до нескольких аргументов, а не только до одного аргумента в $1. Остальные находятся в $2, $3и т. д. Вы не можете индексировать те, у которых есть стандартные функции оболочки, но обычно вам не нужно :вы можете получить доступ к списку аргументов скрипта с помощью "$@". Так:

if [ "$#" -eq 0 ]; then
    echo "no arguments"
else
    echo "$# arguments:"
    for x in "$@"; do
        echo " $x"     # or do whatever with $x
    done
fi

Что-то вроде cp -- "$@" /var/tank/awaiting/, в свою очередь, вызовет cpс файлами, полученными сценарием в качестве аргументов. --предотвращает использование любых следующих аргументов в качестве опций для cp.

1
18.03.2021, 23:16

Если вы вызываете скрипт с:

$ script.sh file*.txt

и если есть совпадения, то оболочка расширит этот глобус до списка совпадений файлов. Предположим, например, что у вас есть file1.txt, file2.txtи file3.txt, тогда приведенная выше команда эквивалентна:

$ script.sh file1.txt file2.txt file3.txt

Порядок может отличаться, но здесь это не важно.

Одним из вариантов обработки файлов в этом случае является цикл, подобный:

while [[ $# -ne 0 ]]; do
    # process ${1}
    shift
done

shiftотбросит старые ${1}и сдвинет оставшиеся параметры "влево" на единицу (2 станет 1, 3 станет 2 и т. д. ). shiftтакже обновляет $#.

Например:

#!/bin/bash

while [[ $# -ne 0 ]]; do
    echo ${1}
    shift
done

Если я запущу этот скрипт, я увижу:

$./script.sh a b c
a
b
c
$
2
18.03.2021, 23:16

Теги

Похожие вопросы