Решено: Bash Function

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
Аватара пользователя
AMD
Сообщения: 478
Статус: Maestro
ОС: Linux Kubuntu 7.10
Контактная информация:

Решено: Bash Function

Сообщение AMD »

Как создать функцию в bash?
Как переменой дать вывод (fdisk -l)? пробовал t1=(fdisk -l) #не катит
Как создать переменую массив?

Спасибо за внимание
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Решено: Bash Function

Сообщение Liksys »

Код: Выделить всё

value=`fdisk -l`
Спасибо сказали:
Аватара пользователя
AMD
Сообщения: 478
Статус: Maestro
ОС: Linux Kubuntu 7.10
Контактная информация:

Re: Решено: Bash Function

Сообщение AMD »

Liksys писал(а):
07.08.2007 22:48

Код: Выделить всё

value=`fdisk -l`


Не получается

Код: Выделить всё

jj='sudo fdisk -l'
echo $jj


а на экране
sudo fdisk -l

а мне нужно вывод этой командной строки типа
Диск /dev/sda: 160.0 ГБ, 160041885696 байт
255 головок, 63 секторов/дорожку, 19457 цилиндров
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр Начало Конец Блоки Id Система
/dev/sda1 1 1020 8193118+ 83 Linux
/dev/sda2 * 1021 2040 8193150 83 Linux
/dev/sda3 2041 3570 12289725 83 Linux
/dev/sda4 3571 19457 127612327+ f W95 расшир. (LBA)
/dev/sda5 3571 3832 2104483+ 82 Linux своп / Solaris
/dev/sda6 3833 5872 16386268+ b W95 FAT32
/dev/sda7 5873 8932 24579418+ 7 HPFS/NTFS
/dev/sda8 8933 18366 75778573+ 7 HPFS/NTFS
/dev/sda9 18367 19457 8763426 83 Linux
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Решено: Bash Function

Сообщение Uncle_Theodore »

AMD писал(а):
07.08.2007 22:42
Как создать функцию в bash?

http://www.gnu.org/software/bash/manual/bashref.html#SEC22

Код: Выделить всё

teddy@laptop~$ f() { a=3; echo $((a+1)); };
teddy@laptop~$ f
4

Как создать переменую массив?

http://www.gnu.org/software/bash/manual/bashref.html#SEC80

Код: Выделить всё

teddy@laptop~$ a[0]=1;a[1]=2;a[2]=3;
teddy@laptop~$ for ((i=0;$i<3;i++)); do echo ${a[$i]}; done
1
2
3


AMD писал(а):
07.08.2007 23:00
Liksys писал(а):
07.08.2007 22:48

Код: Выделить всё

value=`fdisk -l`


Не получается

Код: Выделить всё

jj='sudo fdisk -l'
echo $jj


а на экране
sudo fdisk -l


В примере Liksys'а это не кавычки ', которые под ", где русское э, а обратные кавычки `, которые обычно там, где русское ё
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian
Контактная информация:

Re: Решено: Bash Function

Сообщение diesel »

вместо обратных кавычек в "новых" версиях bash'а лучше использовать скобки, удобней и читабельней получается:
ff=$(fdisk -l)
Спасибо сказали:
Аватара пользователя
AMD
Сообщения: 478
Статус: Maestro
ОС: Linux Kubuntu 7.10
Контактная информация:

Re: Решено: Bash Function

Сообщение AMD »

diesel писал(а):
07.08.2007 23:13
вместо обратных кавычек в "новых" версиях bash'а лучше использовать скобки, удобней и читабельней получается:
ff=$(fdisk -l)



Дествитейльно работает и так и с кавычками

Код: Выделить всё

#!/bin/bash
#/sbin/blkid /dev/sda*
clear
Super=""
#Super=$(sudo fdisk -l)
Super=`sudo fdisk -l`
echo $Super


Диск /dev/sda: 160.0 ГБ, 160041885696 байт 255 головок, 63 секторов/дорожку, 19457 цилиндров Единицы = цилиндры по 16065 a b miniprogram miniprogram1 miniprogram3 scriptul scriptul2 scriptul3 text 512 = 8225280 байт Устр-во Загр Начало Конец Блоки Id Система /dev/sda1 1 1020 8193118+ 83 Linux /dev/sda2 a b miniprogram miniprogram1 miniprogram3 scriptul scriptul2 scriptul3 text 1021 2040 8193150 83 Linux /dev/sda3 2041 3570 12289725 83 Linux /dev/sda4 3571 19457 127612327+ f W95 расшир. (LBA) /dev/sda5 3571 3832 2104483+ 82 Linux своп / Solaris /dev/sda6 3833 5872 16386268+ b W95 FAT32 /dev/sda7 5873 8932 24579418+ 7 HPFS/NTFS /dev/sda8 8933 18366 75778573+ 7 HPFS/NTFS /dev/sda9 18367 19457 8763426 83 Linux

в этом тексте почемуто лишние слова появляются а точнее названия файлов в одной папке с запускаемым скриптом
a b miniprogram miniprogram1 miniprogram3 scriptul scriptul2 scriptul3 text 512


Вопрос почему это происходит?
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Решено: Bash Function

Сообщение allez »

Происходит это потому, что в выводе команды fdisk -l присутствуют символы звездочки "*", которые bash распознает как подстановочные и выдает вместо них список файлов в текущем каталоге:

Код: Выделить всё

# fdisk -l

Disk /dev/sda: 36.9 GB, 36951490560 bytes
255 heads, 63 sectors/track, 4492 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1          33      265041   82  Linux swap / Solaris
/dev/sda2   *          34        4492    35816917+  83  Linux

Чтобы избавиться от этого эффекта, заключите имя переменной Super в двойные кавычки:

Код: Выделить всё

echo "$Super"
Спасибо сказали:
Аватара пользователя
minoru-kun
Сообщения: 620
ОС: Debian GNU/Linux

Re: Решено: Bash Function

Сообщение minoru-kun »

Код: Выделить всё

minoru@melancholic:~$ value=`sudo fdisk -l`
minoru@melancholic:~$ echo "$value"

Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1         765     6144831   83  Linux
/dev/hda2   *         766        1466     5630782+   7  HPFS/NTFS
/dev/hda3            1467        9729    66372547+   f  W95 Ext'd (LBA)
/dev/hda5            1467        9541    64862374+  83  Linux
/dev/hda6            9542        9729     1510078+  82  Linux swap / Solaris

Disk /dev/hdc: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hdc1               1       19457   156288321   83  Linux
Спасибо сказали:
Аватара пользователя
AMD
Сообщения: 478
Статус: Maestro
ОС: Linux Kubuntu 7.10
Контактная информация:

Re: Решено: Bash Function

Сообщение AMD »

Спасибо ВСЕМ за помощь !!!
Спасибо сказали:
Ответить