Создание меню на bash

Автор letnab, 09 сентября 2014, 11:36:01

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

letnab

Доброго времени суток форумчане.
Нужна помощь в написании меню. Меню подобное этому

root@debian:/var/src# cat select
#!/bin/bash
function ping_ya {
clear
ping -c 3 ya.ru
}
function  ifconfig {
clear
/sbin/ifconfig
}
function meminfo {
clear
/bin/ cat /proc/meminfo
}
#Создаем меню
function menu {
clear
echo
echo -e "\t\t\tМеню скрипта\n"
echo -e "\t1. Пинговать ya.ru"
echo -e "\t2. Информация об интерфейсах"
echo -e "\t3. Информация о памяти"
echo -e "\t0. Выход"
echo -en "\t\tВведите номер раздела: "
read -n 1 option
}
#Используем цикл While и команду Case для создания меню.
while [ $? -ne 1 ]
do
        menu
        case $option in
0)
        break ;;
1)
        ping_ya ;;
2)
        ifconfig ;;
3)
        meminfo ;;
*)
        clear
echo "Нужно выбрать раздел";;
esac
echo -en "\n\n\t\t\tНажмите любую клавишу для продолжения"
read -n 1 line
done
clear


теперь о том, что я хочу реализовать.
в каталоге /var/vpn/ лежат файлы для коннекта к vpn через pon, их примерно 5-6 в менюшке хочу реализовать вывод списка со скриптами и куда можно приконнектиться.Я думаю понятно написал. см.аттач
при клике на кнопку 1 показать все скрипты в нужном каталоге, через ls у меня немного не получается
Либо подскажите в какую сторону копать

endru

а в чем проблемы? даже исходники есть которые можно править... по аналогии и сделай.
есть конкретные вопросы по bash?

letnab

Я пробовал править. Но сделать так как нужно не удалось.
Нужно списком вывести все скрипты лежащие в папке

endru

find /var/vpn/ -type f -name '*.txt' | while read i
        do
                echo `basename $i`
        done

ищет все файлы txt в директории /var/vpn/ и выводит их имя (без директории) на экран.

letnab

Цитата: endru от 09 сентября 2014, 13:57:48
find /var/vpn/ -type f -name '*.txt' | while read i
        do
                echo `basename $i`
        done

ищет все файлы txt в директории /var/vpn/ и выводит их имя (без директории) на экран.
как вывести я знаю. я просто не так выразился.
их нужно вывести построчно с номером 1.2.3 и тд.
типа такого
**Выберите сервер**
1. офис
2. дом
3. офис_о

--Нажмите клавишу для продолжения. ну и по нажатию на нужную клавишу обрабатывается нужный pon скрипт

endru

отлично. если вы знаете как выводить это на экран, то переделать готовый скрипт не составит труда!
переделывайте скрипт и показывайте, что конкретно не получается!

letnab

Кое что стало получаться. А не подскажите, как я могу дать имя функции из переменной?

vic5710

фция определяется до ее вызова
насчет экрана
dialog  --menu
man dialog
примеров а нете куча

letnab

Цитата: letnab от 10 сентября 2014, 14:16:04
Кое что стало получаться. А не подскажите, как я могу дать имя функции из переменной?
Я искал в инэте. но не нашел ничего. книьте ссылку на пример.

vic5710

не совсем вас понял

func1() {}
func2() {}
func3() {}

echo choice?
read line
[ $line == 1 ] && func1
[ $line == 2  ] && func2

так как то?


endru

Цитата: letnab от 10 сентября 2014, 14:16:04А не подскажите, как я могу дать имя функции из переменной?
никак.
Обозначай их как
function name1 {}
function name2 {}

letnab

есть переменная $x значение в ней может быть разное.
отталкиваясь от этого я и хотел создать функции.
типа function 1 {}
function 2 {} и т.д. Смотрел в сторону case, но тоже четно

vic5710

для этого есть параметры функции

letnab

спасибо за наводку. и снова загвоздка



#!/bin/bash

function countpon
{
    if [ $# -ne 0 ]
    then
        local a=1
        echo "Всего скриптов - $#"
        for i in $@
        do
            echo "$a-й  $i"
            let a++
        done
        return 0
    else
        echo "Параметры не передавались"
        return 1
    fi
}



function viewpon {
clear
sod=`ls /etc/ppp/peers/`
echo -e "===================================="
echo -e         "PON скрипты"
countpon  $sod
echo -e "===================================="
}



на выходе

====================================
PON скрипты
Всего скриптов - 8
1-й  officr
2-й  sp_office
3-й  nn_office
4-й  test
5-й  cool_one
6-й  sip
7-й  oper_v
8-й  100mts
====================================

Такой вопрос. возможно ли это запихнуть в case? и при нажатии на 1, 2, 3 и т.д осуществится какое то действие?

vic5710

у вас есть список
добавьте :

echo ' make your choice'

read line
[  $line == 1 ] && yourfunc1
и тд
имхо вы усложняеете себе задачу