Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 13

Кто нибудь помагите написать shell-процедуру

30.11.2011, 23:58. Показов 5164. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать shell-процедуру, которая:
• вводит символьную строку, содержащую маршрутное имя некоторого файла; проверяет введенное маршрутное имя, если оно начинается с символа /, на совпадение его первой части с маршрутным именем домашнего каталога пользователя;
• если введенное маршрутное имя содержит маршрутное имя домашнего каталога или является относительным, то проверяет существование указанного файла, в противном случае выводит на экран сообщение об ошибке;
• если файл существует, то выводит на экран его содержимое;
• если файл не существует, то создает его и записывает в него строку, передаваемую в качестве параметра;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.11.2011, 23:58
Ответы с готовыми решениями:

Кто нибудь помагите написать shell-процедуру
Написать shell-процедуру, которая: • вводит символьную строку, содержащую текст некоторого сообщения; • проверяет наличие в своем...

Кто нибудь помагите написать shell-процедуру
Написать shell-процедуру которая: Все почтовые сообщения,полученные от заданного первым параметром пользователя,посылает работающим в...

Написать shell-процедуру!
Здравствуйте, помоги те пожалуйста написать shell-процедуру, которая выполняет действия: вычисляет значение арифметического выражения,...

20
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
01.12.2011, 00:47
Цитата Сообщение от MPT 2121
вводит символьную строку, содержащую маршрутное имя некоторого файла; проверяет введенное маршрутное имя, если оно начинается с символа /, на совпадение его первой части с маршрутным именем домашнего каталога пользователя;
Code
1
2
3
4
5
6
[guest@localhost ~]$ s="/a/b/c/d"
[guest@localhost ~]$ [ "${s#/a/b/}" != "$s" ]; echo $?
0
[guest@localhost ~]$ [ "${s#/a/e/}" != "$s" ]; echo $?
1
[guest@localhost ~]$
Цитата Сообщение от MPT 2121
если введенное маршрутное имя содержит маршрутное имя домашнего каталога или является относительным, то проверяет существование указанного файла, в противном случае выводит на экран сообщение об ошибке;
Code
1
2
3
4
5
6
7
8
9
[guest@localhost ~]$ echo $s
/a/b/c/d
[guest@localhost ~]$ dirname $s
/a/b/c
[guest@localhost ~]$ [ -d "$(dirname $s)" ]; echo $?
1
[guest@localhost ~]$ [ -d "/home" ]; echo $?
0
[guest@localhost ~]$
Code
1
2
3
4
5
[guest@localhost ~]$ [ -f /etc/passwd ]; echo $?
0
[guest@localhost ~]$ [ -f /etc/passwe ]; echo $?
1
[guest@localhost ~]$
Цитата Сообщение от MPT 2121
если файл не существует, то создает его и записывает в него строку, передаваемую в качестве параметра
Bash
1
    echo "$1" > "$pathname"
1
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 13
01.12.2011, 08:20  [ТС]
Спасибо большое еще
бы расписать где че происходит если не сложно ))))
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
01.12.2011, 10:55
решётка удаляет из переменной в начале тот шаблон, который стоит после неё, об этом можно прочитать в man bash
левая квадратная скобка работае так же, как программа test, про её возможности можно прочитать в man test
1
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 13
01.12.2011, 14:45  [ТС]
я понимаю что я тебя уже задрал а можно просто тупо какая строчка что делает???
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
01.12.2011, 14:47
вообще скрипт цельный должен быть
а ты, я так понимаю, не собрал это всё воедино
1
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 13
01.12.2011, 14:56  [ТС]
ошибку выдает какуето command not found
ну все что ты мне написал собрал во едино но все ровно эта ошибка
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
01.12.2011, 15:05
напиши, что собрал
1
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 13
01.12.2011, 21:45  [ТС]
[guest@localhost ~]$ s="/a/b/c/d"
[guest@localhost ~]$ [ "${s#/a/b/}" != "$s" ]; echo $?
0
[guest@localhost ~]$ [ "${s#/a/e/}" != "$s" ]; echo $?
1
[guest@localhost ~]$\
[guest@localhost ~]$ echo $s
/a/b/c/d
[guest@localhost ~]$ dirname $s
/a/b/c
[guest@localhost ~]$ [ -d "$(dirname $s)" ]; echo $?
1
[guest@localhost ~]$ [ -d "/home" ]; echo $?
0
[guest@localhost ~]$
[guest@localhost ~]$ [ -f /etc/passwd ]; echo $?
0
[guest@localhost ~]$ [ -f /etc/passwe ]; echo $?
1
[guest@localhost ~]$ я извеняюсь что тебя напрегаю но позарез надо как ((((

Добавлено через 29 секунд
а я ни секу в этом ничего

Добавлено через 5 часов 43 минуты
accept, чувак ты можешь ее всю мне написать я так понел это основная часть правельно??

Добавлено через 52 минуты
так стоп разобрался но теперь выводит хню egaf.sh: 3: 0: not found
egaf.sh: 4: [guest@localhost: not found
127
egaf.sh: 5: 1: not found
egaf.sh: 6: [guest@localhost: not found
egaf.sh: 8: [guest@localhost: not found
egaf.sh: 9: /a/b/c/d: not found
egaf.sh: 10: [guest@localhost: not found
egaf.sh: 11: /a/b/c: not found
dirname: missing operand
Try `dirname --help' for more information.
egaf.sh: 12: [guest@localhost: not found
127
egaf.sh: 13: 1: not found
egaf.sh: 14: [guest@localhost: not found
127
egaf.sh: 15: 0: not found
egaf.sh: 16: [guest@localhost: not found
egaf.sh: 18: [guest@localhost: not found
127
egaf.sh: 19: 0: not found
egaf.sh: 20: [guest@localhost: not found
127
egaf.sh: 21: 1: not found
скажи в чем моя ошибка
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
02.12.2011, 00:47
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/bin/bash
 
checkit=
relative=
 
if [ -z "$1" ]; then
    echo "usage: `basename $0` [ text ]" 1>&2
fi
 
echo -n "Enter filepath: "
read fpath
 
checkit=0
relative=0
if [ "${fpath:0:1}" = / ]; then
    #echo real
    if [ "${fpath#$HOME/}" != "$fpath" -o \
         "$fpath" = "$HOME" ]; then
        #echo home
        checkit=1
    else
        #echo not home
        echo "error: it's not home or relative" 1>&2
    fi
else
    #echo relative
    checkit=1
    relative=1
fi
 
if [ $checkit -eq 1 ]; then
    if [ $relative -eq 1 ]; then
        fpath="$HOME/$fpath"
    fi
    if [ -f "$fpath" ]; then
        echo "Reading $fpath..."
        cat "$fpath"
    elif [ -d "$fpath" ]; then
        echo "It's a directory"
    else
        echo "Writing \"$1\" to $fpath..."
        if echo "$1" 2>/dev/null 1>"$fpath"; then
            echo "ok"
        else
            echo "fail"
        fi
    fi
fi
 
exit 0
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[guest@localhost tests]$ ./t.sh
usage: t.sh [ text ]
Enter filepath: x
Writing "" to /home/guest/x...
ok
[guest@localhost tests]$ ./t.sh abc
Enter filepath: y
Writing "abc" to /home/guest/y...
ok
[guest@localhost tests]$ ./t.sh
usage: t.sh [ text ]
Enter filepath: x
Reading /home/guest/x...
 
[guest@localhost tests]$ ./t.sh
usage: t.sh [ text ]
Enter filepath: y
Reading /home/guest/y...
abc
[guest@localhost tests]$
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[guest@localhost tests]$ ./t.sh
usage: t.sh [ text ]
Enter filepath: /tmp/x
error: it's not home or relative
[guest@localhost tests]$ ./t.sh
usage: t.sh [ text ]
Enter filepath: /home/guest
It's a directory
[guest@localhost tests]$ ./t.sh
usage: t.sh [ text ]
Enter filepath: x/y
Writing "" to /home/guest/x/y...
fail
[guest@localhost tests]$
1
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 13
02.12.2011, 13:06  [ТС]
пожалуйсто распишите построчно что где происходит что для чего нужно пожалуйсто!!!!!!!!!!!!!!!!
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
02.12.2011, 17:48
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/bin/bash
# строка запускает программу,
# в которую подаётся то, что дальше
 
checkit=
relative=
# две переменные - флажки
# checkit - проверять/не проверять
# relative - относительный/не относительный
 
if [ -z "$1" ]; then
    # если первый аргумент скрипта пустой,
    # вывести подсказку о том, что можно задать первый аргумент
    echo "usage: `basename $0` [ text ]" 1>&2
    # из пути запуска скрипта выделяется имя скрипта
    # поток вывода перенаправляется в поток ошибок
    # (если при запуске вывод скрипта перенаправлен в файл,
    #  то подсказка всё равно возникнет на экране)
fi
 
echo -n "Enter filepath: "
# приглашение без перевода строки
read fpath
# прочитать строку ввода в переменную fpath
 
checkit=0
relative=0
# флажки выставляются в положение "нет"
# не проверять, не относительный
 
if [ "${fpath:0:1}" = / ]; then
    # если первый символ введённого пути - слеш,
    # то путь не относительный, а полный
    #echo real
    if [ "${fpath#$HOME/}" != "$fpath" -o \
         "$fpath" = "$HOME" ]; then
        # если после отрезания слева от введённого пути
        # пути домашнего каталога переменная изменилась (получилось отрезать),
        # либо если введённый путь уже равен пути домашнего каталога,
        # то установить флаг проверять в положение "да"
        #echo home
        checkit=1
    else
        # иначе вывести сообщение в поток ошибок
        # и ничего не делать
        #echo not home
        echo "error: it's not home or relative" 1>&2
    fi
else
    # иначе, если первый символ не слеш,
    # то путь относительный и выставляются флаги
    # проверять "да" и относительный "да"
    #echo relative
    checkit=1
    relative=1
fi
 
if [ $checkit -eq 1 ]; then
    # если флаг проверять установлен в положение "да"
    if [ $relative -eq 1 ]; then
        # если флаг относительный установлен в положение "да",
        # составить полный путь, присоединив к введённому пути
        # путь домашнего каталога слева
        fpath="$HOME/$fpath"
    fi
    if [ -f "$fpath" ]; then
        # если файл с полученным путём существует,
        # то вывести на экран сообщение о чтении файла
        # и вывести на экран содержимое файла
        echo "Reading $fpath..."
        cat "$fpath"
    elif [ -d "$fpath" ]; then
        # иначе, если полученный путь является путём каталога,
        # то вывести сообщение в поток вывода о том,
        # что это директория и ничего не делать
        echo "It's a directory"
    else
        # иначе вывести на экран сообщение о записи в файл,
        # записать в файл первый аргумент скрипта
        echo "Writing \"$1\" to $fpath..."
        if echo "$1" 2>/dev/null 1>"$fpath"; then
            # если запись прошла успешно (есть доступ),
            # то вывести сообщение об успешной записи
            echo "ok"
        else
            # иначе вывести сообщение о неуспешной записи
            echo "fail"
            
            # здесь можно добавить exit 1
            # выход с кодом сбоя
        fi
    fi
fi
 
exit 0
# выход с кодом успеха
2
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 13
02.12.2011, 20:27  [ТС]
Спасибо !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 13
14.12.2011, 17:29  [ТС]
блин стал выдавать ошибку бед системсон или че то в этом духе препод сказал что эта ошибка в условие тоесть в самом скрипте где ты пропиывал пожалуйсто помаги
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
14.12.2011, 20:59
не вижу никаких ошибок
0
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 13
15.12.2011, 23:26  [ТС]
Блин я его запускаю все норм ))) том ввожу путь
и тут ошибка может я чето намудрил ??? может я дам свой логин и пароль и вы сделаете как фиалке (моей подруге) пожалуйсто
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
16.12.2011, 00:24
Цитата Сообщение от MPT 2121 Посмотреть сообщение
Блин я его запускаю все норм ))) том ввожу путь
вывод программы скопируй сюда вместе с командами

Цитата Сообщение от MPT 2121 Посмотреть сообщение
может я дам свой логин и пароль и вы сделаете как фиалке
Code
1
2
3
4
5
6
7
[guest@localhost ~]$ dash
$ s=abc
$ echo $s
abc
$ echo ${s:0:1}
dash: Bad substitution
$
вот это чтоли ?

Добавлено через 10 минут
замени
это
Bash
1
if [ "${fpath:0:1}" = / ]; then
на это
Bash
1
if [ "${fpath#/}" != "$fpath" ]; then
0
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 13
16.12.2011, 01:06  [ТС]
а что ты пишешь после запуска??
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
16.12.2011, 01:51
https://www.cyberforum.ru/post2237282.html
написано после скрипта

ну, для dash я не проверял (твоё sh t.sh), всё должно работать так же
там больше ничего нет, расчитанного именно для bash

Добавлено через 25 минут
поправил, проверил
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/bin/sh
# строка запускает программу,
# в которую подаётся то, что дальше
 
checkit=
relative=
# две переменные - флажки
# checkit - проверять/не проверять
# relative - относительный/не относительный
 
if [ -z "$1" ]; then
    # если первый аргумент скрипта пустой,
    # вывести подсказку о том, что можно задать первый аргумент
    echo "usage: `basename $0` [ text ]" 1>&2
    # из пути запуска скрипта выделяется имя скрипта
    # поток вывода перенаправляется в поток ошибок
    # (если при запуске вывод скрипта перенаправлен в файл,
    #  то подсказка всё равно возникнет на экране)
fi
 
echo -n "Enter filepath: "
# приглашение без перевода строки
read fpath
# прочитать строку ввода в переменную fpath
 
checkit=0
relative=0
# флажки выставляются в положение "нет"
# не проверять, не относительный
 
if [ "${fpath#/}" != "$fpath" ]; then
    # если первый символ введённого пути - слеш,
    # то путь не относительный, а полный
    #echo real
    if [ "${fpath#$HOME/}" != "$fpath" -o \
         "$fpath" = "$HOME" ]; then
        # если после отрезания слева от введённого пути
        # пути домашнего каталога переменная изменилась (получилось отрезать),
        # либо если введённый путь уже равен пути домашнего каталога,
        # то установить флаг проверять в положение "да"
        #echo home
        checkit=1
    else
        # иначе вывести сообщение в поток ошибок
        # и ничего не делать
        #echo not home
        echo "error: it's not home or relative" 1>&2
    fi
else
    # иначе, если первый символ не слеш,
    # то путь относительный и выставляются флаги
    # проверять "да" и относительный "да"
    #echo relative
    checkit=1
    relative=1
fi
 
if [ $checkit -eq 1 ]; then
    # если флаг проверять установлен в положение "да"
    if [ $relative -eq 1 ]; then
        # если флаг относительный установлен в положение "да",
        # составить полный путь, присоединив к введённому пути
        # путь домашнего каталога слева
        fpath="$HOME/$fpath"
    fi
    if [ -f "$fpath" ]; then
        # если файл с полученным путём существует,
        # то вывести на экран сообщение о чтении файла
        # и вывести на экран содержимое файла
        echo "Reading $fpath..."
        cat "$fpath"
    elif [ -d "$fpath" ]; then
        # иначе, если полученный путь является путём каталога,
        # то вывести сообщение в поток вывода о том,
        # что это директория и ничего не делать
        echo "It's a directory"
    else
        # иначе вывести на экран сообщение о записи в файл,
        # записать в файл первый аргумент скрипта
        echo "Writing \"$1\" to $fpath..."
        if echo "$1" 2>/dev/null 1>"$fpath"; then
            # если запись прошла успешно (есть доступ),
            # то вывести сообщение об успешной записи
            echo "ok"
        else
            # иначе вывести сообщение о неуспешной записи
            echo "fail"
            
            # здесь можно добавить exit 1
            # выход с кодом сбоя
        fi
    fi
fi
 
exit 0
# выход с кодом успеха
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[guest@localhost home_path]$ dash t.sh
usage: t.sh [ text ]
Enter filepath: x       
Writing "" to /home/guest/x...
ok
[guest@localhost home_path]$ dash t.sh abc
Enter filepath: y
Writing "abc" to /home/guest/y...
ok
[guest@localhost home_path]$ dash t.sh
usage: t.sh [ text ]
Enter filepath: x
Reading /home/guest/x...
 
[guest@localhost home_path]$ dash t.sh
usage: t.sh [ text ]
Enter filepath: y
Reading /home/guest/y...
abc
[guest@localhost home_path]$
 
 
 
[guest@localhost home_path]$ dash t.sh
usage: t.sh [ text ]
Enter filepath: /tmp/x
error: it's not home or relative
[guest@localhost home_path]$ dash t.sh
usage: t.sh [ text ]
Enter filepath: /home/guest
It's a directory
[guest@localhost home_path]$ dash t.sh
usage: t.sh [ text ]
Enter filepath: x/y
Writing "" to /home/guest/x/y...
fail
[guest@localhost home_path]$
1
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 13
16.12.2011, 10:58  [ТС]
я так понел нужен какойто текс к скрипту??? блин ваще не понимаю(((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.12.2011, 10:58
Помогаю со студенческими работами здесь

Написать shell-процедуру..
Написать shell-процедуру, которая: • В каталоге, имя которого передается первым параметром, находит все простые файлы размером более...

написать shell-процедуру
Написать shell-процедуру, которая: Читает содержимое первого файла, передаваемого в качестве первого параметра; Читает содержимое...

Написать shell-процедуру
Помогите написать shell-процедуру которая переводит имена подкаталогов текущего каталога в латиницу.

написать shell процедуру
понимаю,что поздно спохватилась, но до экзамена осталась неделя,а без этой лабораторной меня не допустят(помогите,пожалуйста. Буду очень...

Написать shell-процедуру
Здравствуйте, помогите: Написать shell-процедуру, которая: 1)вводит символьную строку 2)во введенной строке ищет подстроку,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru