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


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

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

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

Оффлайн korick

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

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

Оффлайн Ampermetr

  • Активист
  • *
  • Сообщений: 491
    • Просмотр профиля
Создаешь файл /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
« Последнее редактирование: 03 Ноябрь 2016, 13:46:59 от Azure »
Женский форум,топик "Плакала всю ночь, подскажите из-за чего?"
Линукс форум, топик "Всю ночь собирал генту, подскажите зачем?"

Оффлайн БТР

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

Оффлайн Azure

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

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3433
  • Ubuntu Budgie 18.04 х64
    • Просмотр профиля
Код: (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

Fujitsu UH552: Intel Core i3-3217U, 16GB DDR3 1600MHz, Intel HD4000, Samsung SSD 860 EVO 250GB/Ubuntu Budgie 18.04

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Ну вот, браво 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

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
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

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Какие права рута? Не привыкайте к плохому!
/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

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

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3433
  • Ubuntu Budgie 18.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, Samsung SSD 860 EVO 250GB/Ubuntu Budgie 18.04

Оффлайн 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

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

Код: (bash) [Выделить]
D=`date +%-d`

if [ $D -gt 3 ]
then
((D-=3))
else
D=28
fi
или короче:
Код: (bash) [Выделить]
D=`date +%-d`
[ $D -gt 3 ] && ((D-=3)) || D=28
« Последнее редактирование: 07 Ноябрь 2016, 16:26:26 от renzrv »

 

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