LINUX.ORG.RU

помогите с созданием скрипта с использованием ключей.

 , ,


0

1

в этом скрипте интерпритатор жалуется на недопустимые лексемы в строках 94-104,убирание символов ;; не помогает,жалуется на синтаксис 5ff). Помогите с велосипедом,кстати моя первая программа с ключами =).И надеюсь не последняя,если смогу разобраться.

---------------------------------------думаю ошибка в этом блоке

while getopts ":3f 5f 5ff 10f 10ff h" opt ; #здесь перечисляются ключи для скрипта-которые ниже ссылаются на имена функций 
do
    case $opt in
        3f) 3_folder()  #интерпритатор жалуется на двойные кавычки [br]на 96 строке,когда их убираю,
            ;;          #то начинает жаловаться на следующую строку (97)не устраивает  5f) эта часть. 
        5f) 5_folder()  #
            ;;
        5ff) 5_folder_file()
            ;;
        10f) 10_folder()[
            ;;
        10ff) 10_folder_file()
            ;;
        h) print_help()
            ;;
        # *) echo "Неправильный параметр";
        #     echo "Для вызова справки запустите $ME -h";
        #     exit 1
        #     ;;
        esac
done


-------------------------------------весь код скрипта


#!/bin/bash
set -e #востанавливает скрипт в случае ошибки во время выполнения

#переменная для вывода приветствия и краткого описания скрипта
info_message="скрипт создает несколько папок(3,4,5) и на выбор добавляет в каждую два файла *.txt и *.md "
echo " $info_message  "

ME="folder "
#функции
#функци справки по ключам
function print_help() {
    echo "Работа с папками"
    echo
    echo "Использование: $ME скрипта..."
    echo "Параметры:"
    echo "-3f - создание 3 папок,без файлов."
    echo "-3ff- создание 3 папок,c файлами."
    echo "-5f - создание 5 папок,без файлов."
    echo "-5ff- создание 5 папок,c файлами."
    echo "-10f - создание 10 папок,без файлов. "
    echo "-10f - создание 10 папок,без файлов. "
    echo "-h cправка" 
}

#функции создания папок
function 3_folder() {
    mkdir {1..3}
    echo "3 папки создано успешно"
}

function 5_folder() {
    mkdir {1..5}
    echo "5 папок создано успешно"
}
function 10_folder() {
    mkdir {1..10}
    echo "10 папок создано успешно"
}
function 3_folder_file() {
     #cам цикл перебора списка
for (( i=1; i <= 3; i++ ))
do
#здесь идет команда которая должна выполняться
mkdir $i
cd $i 
touch 1.txt 2.md
cd -
done
#конец цикла
    echo "3 папки c файлами создано успешно "

}

function 5_folder_file() {
    #cам цикл перебора списка
for (( i=1; i <= 5; i++ ))
do
#здесь идет команда которая должна выполняться
mkdir $i
cd $i 
touch 1.txt 2.md
cd -
done
#конец цикла
    echo "5 папок c файлами создано успешно "

}

function 10_folder_file() {
#cам цикл перебора списка
for (( i=1; i <= 10; i++ ))
do
#здесь идет команда которая должна выполняться
mkdir $i
cd $i 
touch 1.txt 2.md
cd -
done
#конец цикла
    echo "10 папок c файлами создано успешно "

}

# Если скрипт запущен без аргументов, открываем справку.
if [ $# = 0 ]; then
    print_help
fi

#думаю ошибка в этом блок
while getopts ":3f 5f 5ff 10f 10ff h" opt ; #здесь перечисляются ключи для скрипта-которые ниже ссылаются на имена функций
do
    case $opt in
        3f) 3_folder()  #интерпритатор жалуется на двойные кавычки на 96 строке,когда их убираю,
            ;;          #то начинает жаловаться на следующую строку (97)не устраивает  5f) эта часть. 
        5f) 5_folder()  #
            ;;
        5ff) 5_folder_file()
            ;;
        10f) 10_folder()
            ;;
        10ff) 10_folder_file()
            ;;
        h) print_help()
            ;;
        # *) echo "Неправильный параметр";
        #     echo "Для вызова справки запустите $ME -h";
        #     exit 1
        #     ;;
        esac
done

интерпритатор

То-то мне это слово показалось подозрительным, ушёл проверять в словарик...

...Вернулся.

3f) 3_folder() #интерпритатор жалуется

Помогите с велосипедом,кстати моя первая программа с ключами

Угу, и с функциями тоже первая. Скобки убери, тогда запустится твоя функция «3_folder».
http://www.bash-scripting.ru/abs/chunks/ch23.html

function function_name { 
command... 
} 

или

function_name () { 
command... 
}

while getopts ":3f 5f 5ff 10f 10ff h" opt ; #здесь перечисляются ключи для скрипта-которые ниже ссылаются на имена функций

  1. Зачем точка с запятой после opt?
  2. getopts --- однобуквенные ключи
    https://rtfm.co.ua/bash-funkciya-getopts-ispolzuem-opcii-v-skriptax/
    Там же написано, что если нужны длинные, то тебе к «getopt». Ну, или вручную разбирать параметры командной строки.
  3. Вопрос по логике/структуре самой программы. Зачем однотипные задачи решаются разными ключами? Сделай ключ "-f", а в его значении передавай количество нужных файлов. Получится вызов для создания 258 файлов в виде prog.sh -f 258. Внутри getopts значение ключа передавай в функцию через $OPTARG.
justAmoment ★★★★★ ()

я надеюсь, что в дальнейшем подразумевается нечто большее, чем создание папок {1..3}. Потому что если только это - не нужно такое количество ключей. Важно один ключи с количеством необходимых папок (записанный, условно, в fcount) и потом for i in {1..$fcount}

Crystal_HMR ★★★ ()
Ответ на: комментарий от Crystal_HMR

В перед и страшный конвеер конвертацию html pdf md txt fb2,на gulp с плагинами- ужасное но рабочее извращение.

oleg_templ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.