Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/43: Рейтинг темы: голосов - 43, средняя оценка - 4.81
3 / 3 / 0
Регистрация: 08.02.2011
Сообщений: 49
1

Проверка количества аргументов в скрипте

04.03.2018, 12:12. Показов 8070. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть скрипт, который запускается с четырьмя параметрами.
Хочу сделать элементарную проверку на количество параметров

Bash
1
2
3
4
if [$# != 4]
echo Неверное количество параметров
exit 1
fi
Не работает условие, где я неправ?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2018, 12:12
Ответы с готовыми решениями:

Установка ограничения количества пользователей онлайн в скрипте
Есть скрипт, в котором стоит ограничение количества зарегистрированных пользователей. Еще...

Сумма произвольного количества аргументов из командной строки
Доброго времени суток. Помогите, пожалуйста. Мне нужно написать класс, который суммирует...

Поведение функции в зависимости от количества переданных аргументов
Класс Point должен содержать новый метод, возвращающий расстояние от точки, которую он описывает,...

С++ проверка аргументов
Подскажите код для проверки аргументов командной строки на входе программы.

10
Эксперт NIX
2795 / 2038 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
04.03.2018, 12:24 2
Стоит выучить синтаксис
  1. Формат команды if условие then действие если истина [else действие если ложь] fi
  2. [ ... ] - это тоже команда (альтернативное написание test) так что не забывайте про пробелы!
  3. 4 это число, а для сравнения чисел у команды test другие операторы (не =)
0
342 / 197 / 52
Регистрация: 18.10.2017
Сообщений: 1,938
04.03.2018, 16:03 3
Лучший ответ Сообщение было отмечено Marinero как решение

Решение

Сначала попробуйте после открывающей скобки и перед закрывающей ставить пробелы, а также точнее соблюдать синтаксис:
Bash
1
2
3
4
if [ $# != 4 ] ; then
echo Неверное количество параметров
exit 1
fi
1
3 / 3 / 0
Регистрация: 08.02.2011
Сообщений: 49
05.03.2018, 01:46  [ТС] 4
Огромное всем спасибо Всё получилось.
0
0 / 0 / 0
Регистрация: 19.03.2022
Сообщений: 57
19.03.2022, 12:22 5
Всем привет. Столкнулся со следующей задачей на bash: необходимо подсчитать количество и сумму параметров командной строки. Написал такой скрипт:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash                                                                 
                                                                            
args=$#                                                                     
sum=0                                                                       
if  ((args == 0))                                                           
    then                                                                    
          echo "Аргументы отсутствуют"                                        
          exit 1                                                              
else                                                                        
    for ((i = 1; i <= args;  ++i))                                          
         do ((sum += $i))                                                        
    done                                                                    
fi                                                                          
echo "Количество аргументов командной строки: $args"                        
echo "Сумма аргументов командной строки: $sum"                              
exit 0
Вроде бы отрабатывает, но есть проблема: если передать один параметр, например, 10, сумма будет 1. Не могу поянть, в чем причина.
Господа, просветите, в чем я ошибся?
0
896 / 268 / 54
Регистрация: 30.08.2017
Сообщений: 1,776
19.03.2022, 14:02 6
ну так
фор и=1; и<=1; ++и
сум = 0 + 1
доне

Всё... Один раз цикл прошёл и хватит.

у Вас же я вижу сумму членов арифметической прогресии на вскидку.
0
0 / 0 / 0
Регистрация: 19.03.2022
Сообщений: 57
19.03.2022, 14:18 7
Когда баг этот нашел, то сначала подумал в код дополнителную ветку if...else добавить, но не хочется захламлять код, потому что вроде бы как он должен работать. Скрипт должен считывать сумму независимо от количества переданных аргументо, хоть 1, хоть 100. И вопрос в том, что не так с кодом для одного аргумента? Если по-другому никак не реализовать, то добавлю дополнительное условие.
Сразу оговорюсь, что учусь писать на bash. Пересмотрел много статей на эту тему, но там примеры только для определенного количества аргументов, а для заранее неизвестного примеров кода нет.
0
896 / 268 / 54
Регистрация: 30.08.2017
Сообщений: 1,776
19.03.2022, 17:10 8
Повторю - Вы складываете не значения аргументов, а вычисляете сумму арифметической прогрессии ($i - это значение счётчика цикла, а не значение какого-либо параметра! надо типа такого - sum=$(($1+$2))), я же расписал Вам итерацию цикла, что в коде получился.
для перебора аргументов надо их сдвигать shift
Вот хороший цикл статей и ссылка на ваш случай:
https://habr.com/ru/company/ruvds/blog/326328/
0
0 / 0 / 0
Регистрация: 19.03.2022
Сообщений: 57
19.03.2022, 17:11 9
А почему $i не рассматривается как $1, $2... и так далее, пока не $i не будет равен $#, то бишь их количеству? Я думал sum=sum + $1, далее к тому, что получилось, прибавляем $2. Ну и так далее.
Статьи эти читал, да, про shift там есть...
0
342 / 197 / 52
Регистрация: 18.10.2017
Сообщений: 1,938
19.03.2022, 18:07 10
Потому что у вас $i - это имя переменной i. Вам же сказали, что надо использовать shift.
Я предпочитаю конструкции
Bash
1
if [ $args -eq 0 ] ; then
а для вычислений - let, но это кому как удобнее.
0
0 / 0 / 0
Регистрация: 19.03.2022
Сообщений: 57
19.03.2022, 19:51 11
Сделал с помощью shift, все работает. Спасибо всем за помощь!
0
19.03.2022, 19:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2022, 19:51
Помогаю со студенческими работами здесь

Ошибка в скрипте (скрипт для скачивания файлов с моего сайта с указанием количества раз)
Люди, расскажите, чего я не понимаю в этой жизни? Делаю скрипт для скачивания файлов с моего сайта...

Clojure Арность функций - Несоответствие количества аргументов ожидаемому количеству
Хочу рассмотреть этот вопрос поподробнее. В обоих вариантах несоответствия количества аргументов...

Передача неизвестного количества аргументов в функцию, как реализовать?
Вот есть функция и в нее будут передаваться какие-то аргументы, причем заранее не известен их тип и...

Проверка аргументов программы
День добрый! Интересует, как можно проверить на корректность аргументы, передаваемые программе....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru