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 чтобы работало.

Разберем по порядку

  1. grep -P '^'$1':' 123.txt - в $1 содержится переданный аргумент (2), далее поиск по регулярке в файле значения ^2:.
  2. cut -d: -f2 отрезает по разделителю "двоеточие" и берет вторую часть
  3. awk '{print $1}' - в файле есть пробелы, эта часть отрезает из
  4. bash "$FILE.sh" - запуск на выполнение.
→ Ссылка