Bash - выбор из файла
Ребят, помогите pls. Исходные данные - есть файл, 123.txt вида:
1:test123a
2:test234f
3:test345h
4:test456u
5:test678v
6:test789e
7:test890v
8:test098t
9:test987g
10:test876i
11:test756f
12:test645s
13:test543d
14:test432y
есть файлы, вида:
./1111/test123a.sh
./1111/test234f.sh
./1111/test345h.sh
./1111/test456u.sh
./1111/test678v.sh
./1111/test789e.sh
./1111/test890v.sh
./1111/test098t.sh
./1111/test987g.sh
./1111/test876i.sh
./1111/test756f.sh
./1111/test645s.sh
./1111/test543d.sh
./1111/test432y.sh
нужно сделать скрипт, который при подаче на вход цифры сравнивал ее с цифрой до двоеточия в файле 123.txt, находил скрипт с именем после двоеточия и выполнял этот скрипт.
Новичок в линуксе, второй день никак не могу придумать как можно такую выборку сделать... Спасибо!!!
Ответы (2 шт):
Автор решения: PotroNik
→ Ссылка
#!/bin/bash
#входящий параметр
number=${1}
#либо можно предложить пользователю ввести номер вручную
#для использования раскоментировать следующую строку
#read -p "Введите цифру: " number
#Проверка что введена цифра/ы
[[ ${number:-null} =~ ^[0-9]+$ ]] || {
echo "Можно вводить только цифры, выходим"
exit
}
#Получаем имя скрипта с цифрой
#Выбираем последнюю запись на случай, если было несколько строк с данной цифрой ограничиваемся последней записью
scriptName=`grep -oP "(?<=^$number:).*" 123.txt | tail -n1`
#Запускаем скрипт
$scriptName
Автор решения: Total Pusher
→ Ссылка
Скрипт cmd.sh:
#!/bin/bash
FILE=`grep -P '^'$1':' 123.txt | cut -d: -f2 | awk '{print $1}'`
bash "$FILE.sh"
Пример использования: ./cmd.sh 2. Файл 123.txt должен быть в текущем каталоге. И не забудьте chmod +x ./cmd.sh чтобы работало.
Разберем по порядку
grep -P '^'$1':' 123.txt- в$1содержится переданный аргумент (2), далее поиск по регулярке в файле значения^2:.cut -d: -f2отрезает по разделителю "двоеточие" и берет вторую частьawk '{print $1}'- в файле есть пробелы, эта часть отрезает изbash "$FILE.sh"- запуск на выполнение.