Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Помогите в создании терминальной программы  (Прочитано 638 раз)

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

Оффлайн korick

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Требования
1 должна быть очень простой может даже не программой а скриптом
2 должна запускаться в терминале без доп указаний пути к скрипту или программе
суть программы
вводишь данные типо myprogram -info
выдает myprogram ver 1.0

вводишь данные типо myprogram -info2
выдает что-то еще(особо не имеет значение)
больше ничего не нужно
подскажите, где посмотреть, что почитать. Нужно это для того чтобы изобразить что у меня стоит некая программа  с именем myprogram и что она якобы что-то делает

Оффлайн Ampermetr

  • Активист
  • *
  • Сообщений: 491
    • Просмотр профиля
Создаешь файл /home/user/bin/myprogram  и копируешь туда скрипт.
Код: Python
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import sys
  5.  
  6. def myprogram():
  7.     if "-info" in sys.argv:
  8.         print ("myprogram ver 1.0")
  9.     elif "-info2" in sys.argv:
  10.         print ("Good morning!")
  11.     else:
  12.         print ("Error. Please try again.")
  13.  
  14. if __name__ == '__main__':
  15.     myprogram()
  16.    
затем
export PATH="${PATH:+${PATH}:}/home/user/bin"
chmod 777 /home/user/bin/myprogram
« Последнее редактирование: 03 Ноябрь 2016, 13:46:59 от Azure »
Женский форум,топик "Плакала всю ночь, подскажите из-за чего?"
Линукс форум, топик "Всю ночь собирал генту, подскажите зачем?"

Оффлайн БТР

  • Заслуженный пользователь
  • Модератор форума
  • Старожил
  • *
  • Сообщений: 5137
    • Просмотр профиля

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5659
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Ampermetr, Почему на питоне-то? ;)
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3095
  • Ubuntu Mate 16.04 х64
    • Просмотр профиля
Код: Bash
  1. #!/bin/sh
  2.  
  3. case "$1" in
  4.     -version)
  5.         echo $0" version 0.01a"
  6.         exit 0
  7.     ;;
  8.     -info)
  9.         echo $0" author: NoName"
  10.         exit 0
  11.     ;;
  12.     *)
  13.         echo "error"
  14.         echo "Usage $1 -<version|info>"
  15.         exit 1
  16. esac
  17. exit 0
  18.  
  19.  
Fujitsu UH552: Intel Core i3-3217U, 16GB DDR3 1600MHz, Intel HD4000, Intel 535 120GB/Ubuntu 16.04 Mate
HP 625: AMD Athlon P320, 4GB DDR3 1333MHz, AMD HD4250, Seagate Momentus/Ubuntu 14.04 Mate

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5659
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Ну вот, браво EvangelionDeath. Хотя, конечно, для опций есть стандартный иструмент getopt
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн korick

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Создаешь файл /home/user/bin/myprogram  и копируешь туда скрипт.
Код: Python

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    import sys
     
    def myprogram():
        if "-info" in sys.argv:
            print ("myprogram ver 1.0")
        elif "-info2" in sys.argv:
            print ("Good morning!")
        else:
            print ("Error. Please try again.")
     
    if __name__ == '__main__':
        myprogram()
       

затем
Код: [Выделить]

export PATH="${PATH:+${PATH}:}/home/user/bin"
chmod 777 /home/user/bin/myprogram


сделал все вышеперечисленное, создал папку bin в нее положил файл (без расширения) вот что выдал терминал

destroyr@DestroyrTec:~$ export PATH="${PATH:+${PATH}:}/home/destroyr/bin"
destroyr@DestroyrTec:~$ chmod 777 /home/destroyr/bin/myprogram
destroyr@DestroyrTec:~$ myprogram -info

/home/destroyr/bin/myprogram: строка 6: ошибка синтаксиса около неожиданной лексемы `('
/home/destroyr/bin/myprogram: строка 6: `    def myprogram():'



Пользователь добавил сообщение 03 Ноябрь 2016, 14:22:07:
Код: Bash

    #!/bin/sh
     
    case "$1" in
        -version)
            echo $0" version 0.01a"
            exit 0
        ;;
        -info)
            echo $0" author: NoName"
            exit 0
        ;;
        *)
            echo "error"
            echo "Usage $1 -<version|info>"
            exit 1
    esac
    exit 0
     
     

Как этим воспользоваться?
« Последнее редактирование: 03 Ноябрь 2016, 14:22:07 от korick »

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5659
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
korick, Попробуйте убрать в скрипте скобки «()» после myprogram

Пользователь добавил сообщение 03 Ноябрь 2016, 14:29:55:
Как этим воспользоваться?
Так же. Сохранить в файле в /home/destroyr/bin/myprogram2cat  >$HOME/bin/myprogram2 <<\eof
#!/bin/sh
 
case "$1" in
    -version)
        echo $0" version 0.01a"
        exit 0
    ;;
    -info)
        echo $0" author: NoName"
        exit 0
    ;;
    *)
        echo "error"
        echo "Usage $1 -<version|info>"
        exit 1
esac
exit 0
eof
и присвоить права на исполнениеchmod +x $HOME/bin/myprogram2
« Последнее редактирование: 03 Ноябрь 2016, 15:01:05 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн korick

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
korick, Попробуйте убрать в скрипте скобки «()» после myprogram
не помогло, осталось тоже самое

Пользователь добавил сообщение 03 Ноябрь 2016, 14:47:48:
chmod +x /home/user/bin/myprogram2

директория должна быть именно такой? /home/destroyr/bin/myprogram2
или может все таки такой? HOME/bin/myprogram2

ту что вы написали, не может найти
sudo: myprogram2: command not found

а без прав рута даже искать отказывается
« Последнее редактирование: 03 Ноябрь 2016, 14:47:48 от korick »

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5659
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Какие права рута? Не привыкайте к плохому!
/home/destroyr/bin/myprogram2 это тоже самое что $HOME/bin/myprogram2 для пользователя destroyr. Можете проверитьecho $HOME
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн korick

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: Помогите в создании терминальной программы
« Ответ #10 : 03 Ноябрь 2016, 15:03:47 »
получилось запустить сценарий следующим образом (предварительно зарегистрировав chmod 555 /home/destroyr/bin/myprogram2
)

destroyr@DestroyrTec:~$ sudo /home/destroyr/bin/myprogram2 -info
/home/destroyr/bin/myprogram2 author: NoName

теперь вопрос, как сделать так чтобы он в ответе писал без полного указания пути
т.е не /home/destroyr/bin/myprogram2 author: NoName
а просто author: NoName

так возможно?

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5659
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Помогите в создании терминальной программы
« Ответ #11 : 03 Ноябрь 2016, 15:10:23 »
Возможно всё. Но водить за ручку и подтирать носик никто Вам не будет. Основное направление дали, дальше сами «ножками, ножками»
http://rus-linux.net/MyLDP/BOOKS/abs-guide/flat/abs-book.html
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3095
  • Ubuntu Mate 16.04 х64
    • Просмотр профиля
Re: Помогите в создании терминальной программы
« Ответ #12 : 03 Ноябрь 2016, 15:14:30 »
korick, я спецально даже ошибку в скрипте оставил)

$? - результат выполнения предыдущей команды (точнее даже код)
$0 - имя программы\скрипта (часто сполным путем)
$1 ... - номер параметра.

Вот теперь подумайте, что надо убрать, что бы не выводился полный путь и название?
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 03 Ноябрь 2016, 15:26:15 от Azure »
Fujitsu UH552: Intel Core i3-3217U, 16GB DDR3 1600MHz, Intel HD4000, Intel 535 120GB/Ubuntu 16.04 Mate
HP 625: AMD Athlon P320, 4GB DDR3 1333MHz, AMD HD4250, Seagate Momentus/Ubuntu 14.04 Mate

Оффлайн korick

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: Помогите в создании терминальной программы
« Ответ #13 : 06 Ноябрь 2016, 15:58:37 »
Подскажите еще пожалуйста правильный синтаксис конструкции if? А то все то что написано в соответствующей литературе почему то не работает
есть переменная D которая у меня обозначена как число месяца и от нее мне нужно отнять 3 дня, но если она меньше 4 то нужно сделать ее равной 28.
если на AS 3.0 это выглядело бы как

D:Number = CurDate // динамическое число месяца
if (D > 4){D-=3}
if (D<3){D=28}


я написал следующее

export D=`date +%-d`
D=$((D -3))  # через команду let почему то не получилось сделать вычитание

эта конструкция работает, но не проверяет условие

export D=`date +%-d`
 if [[ D > 3 ]]
    then (( D-=3 ))
  else
    [[ D = 28 ]]
  fi

эта не работает, почему?





 
« Последнее редактирование: 06 Ноябрь 2016, 16:02:35 от korick »

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 1967
    • Просмотр профиля
Re: Помогите в создании терминальной программы
« Ответ #14 : 06 Ноябрь 2016, 16:19:53 »
Потому что не правильно.

Код: Bash
  1. D=`date +%-d`
  2.  
  3. if [ $D -gt 3 ]
  4. then
  5.         ((D-=3))
  6. else
  7.         D=28
  8. fi
  9.  
или короче:
Код: Bash
  1. D=`date +%-d`
  2. [ $D -gt 3 ] && ((D-=3)) || D=28
  3.  
« Последнее редактирование: 07 Ноябрь 2016, 16:26:26 от renzrv »

 

Страница сгенерирована за 0.082 секунд. Запросов: 24.