Автор Тема: Массивы в bash  (Прочитано 3221 раз)

Оффлайн zah

  • Участник
  • *
  • Сообщений: 141
  • ^_^
Массивы в bash
« : 11.02.2020 13:14:34 »
   Всем привет!

Почему я с массивами нормально могу работать используя echo, а например mkdir и mkfs.ext4 ругаются?
Как правильно массивы подавать в циклы, может подскажите

#!/bin/bash
DISK=(sda1 sda2 sdb1)
echo ${DISK[@]}
for disk in ${DISK[@]}; do mkfs.ext4 -F /dev/$disk; done

# ./script
sda1 sda2 sdb1
строка 3: mkfs.ext4: Нет такого файла или каталога
строка 3: mkfs.ext4: Нет такого файла или каталога
строка 3: mkfs.ext4: Нет такого файла или каталога

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 368
Re: Массивы в bash
« Ответ #1 : 11.02.2020 13:17:50 »
А echo $disk что выводит?

Оффлайн zah

  • Участник
  • *
  • Сообщений: 141
  • ^_^
Re: Массивы в bash
« Ответ #2 : 11.02.2020 13:21:42 »
А echo $disk что выводит?
sda1
sda2
sdb1

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 368
Re: Массивы в bash
« Ответ #3 : 11.02.2020 14:42:19 »
Тогда видимо правильно всё, а ругается на отсутствие mkfs.ext4. Окружение рута, или пользователя?

Оффлайн zah

  • Участник
  • *
  • Сообщений: 141
  • ^_^
Re: Массивы в bash
« Ответ #4 : 11.02.2020 15:22:07 »
Тогда видимо правильно всё, а ругается на отсутствие mkfs.ext4. Окружение рута, или пользователя?
окружение рута...
ну так ругается и на mkdir, такие проги установлены.

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 152
Re: Массивы в bash
« Ответ #5 : 11.02.2020 15:44:15 »
Сноси Винду, переходи на Линукс ! :)

Оффлайн zah

  • Участник
  • *
  • Сообщений: 141
  • ^_^
Re: Массивы в bash
« Ответ #6 : 11.02.2020 16:42:47 »
mkfs.ext4
/sbin/mkfs.ext4
Отработало, Спасибо!

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 368
Re: Массивы в bash
« Ответ #7 : 11.02.2020 16:57:44 »
Отработало, Спасибо!
Значит права рута, а вот окружение - пользователя: https://www.altlinux.org/Su. Всё дело в "-".

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Массивы в bash
« Ответ #8 : 12.02.2020 10:08:08 »
ну так ругается и на mkdir, такие проги установлены.

Оно не должно ругаться на mkdir ни при каком раскладе, - каталог /bin в переменной $PATH и у пользователя и у root и интерпретатор не может не найти команду mkdir. У вас что, переменная $PATH сломана?

Оффлайн zah

  • Участник
  • *
  • Сообщений: 141
  • ^_^
Re: Массивы в bash
« Ответ #9 : 16.02.2020 12:02:57 »
ну так ругается и на mkdir, такие проги установлены.

Оно не должно ругаться на mkdir ни при каком раскладе, - каталог /bin в переменной $PATH и у пользователя и у root и интерпретатор не может не найти команду mkdir. У вас что, переменная $PATH сломана?

Нет, там  в порядке всё с переменной.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Массивы в bash
« Ответ #10 : 16.02.2020 13:46:05 »
Нет, там  в порядке всё с переменной.

Хм-м...
p9-xfce-sysv:
# ls -l ./ | grep sd[a,b]
#
# grep -n . ./script-dir.sh
1:#!/bin/bash
2:DISK=(sda1 sda2 sdb1)
3:echo ${DISK[@]}
4:for disk in ${DISK[@]}; do mkdir $disk; done
# sh ./script-dir.sh
sda1 sda2 sdb1
# ls -l ./ | grep sd[a,b]
drwxr-xr-x 2 root   root       4096 лют 16 13:43 sda1
drwxr-xr-x 2 root   root       4096 лют 16 13:43 sda2
drwxr-xr-x 2 root   root       4096 лют 16 13:43 sdb1
# echo $PATH
/root/bin:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin
# which mkdir
/bin/mkdir

Аналогично и у пользователя:
$ ls -l ./ | grep sd[a,b]
$
$ sh ./script-dir.sh
sda1 sda2 sdb1
$ ls -l ./ | grep sd[a,b]
drwxr-xr-x 2 user user       4096 лют 16 13:56 sda1
drwxr-xr-x 2 user user       4096 лют 16 13:56 sda2
drwxr-xr-x 2 user user       4096 лют 16 13:56 sdb1
$ which mkdir
/bin/mkdir
« Последнее редактирование: 16.02.2020 13:59:21 от Speccyfighter »