В настоящее время я работаю над небольшим сценарием, предназначенным для резервного копирования на ленту, и мне нужен сценарий для поиска любого ленточного накопителя, связанного с системой.Мне удалось заставить эту часть работать, и мы можем видеть ниже путь двух ленточных накопителей:
lsscsi --transport | grep fc: | grep tape | awk -F" " ' { print $4 } '
/dev/st0
/dev/st1
Правка - Вот необработанный вывод команд lsscsi:
[1:0:0:0] tape fc:0x50014380032a90b8,0x000001 /dev/st0
[2:0:0:0] tape fc:0x50014380032a90bb,0x000001 /dev/st1
Я хочу просто найти способ перенаправить каждую строку предыдущего вывода в новую переменную ($drive0=/dev/st0
, $drive1=/dev/st1
и т. Д.).Моя первая попытка выглядела так, и она не работает, потому что все строки сбрасываются в одну и ту же переменную с именем $path_tape
:
#!/bin/bash
/usr/bin/lsscsi --transport | grep fc: | grep tape | while read line ; do
path_tape=$(echo $line | awk -F" " ' { print $4 } ')
done
Теперь дело в том, что этот поток в котором упоминается способ увеличения имен переменных, поэтому я попытался адаптировать свой код к этому решению, в результате чего были получены следующие строки:
#!/bin/bash
i=0
/usr/bin/lsscsi --transport | grep fc: | grep tape | while read line ; do
var="path_tape$i"
${!var}=$(echo $line |awk -F" " ' { print $4 } ')
((i++))
done
Но при выполнении я теперь получаю синтаксическую ошибку:
./test.sh: line 7: =/dev/st0: No such file or directory
./test.sh: line 7: =/dev/st1: No such file or directory
Что мне здесь не хватает?