LinuxForum.Fans
Тема

fstab и bash

Автор: silenduhom 42 сообщений 2739 просмотров
17.04.2019 15:46 #431460

Суть:

После установки Debian/Ubuntu, пользователь запускает скрипт script.sh, в результате которого, в конец файла fstab копируется строчка по умолчанию:

text
//10.3.75.8/обменник /mnt/Share cifs domain=mydomen.ru,username=Sasha,password=tytparol,iocharset=utf8,auto,users,file_mode=0777,dir_mode=0777 0 0

делается это так
[console]echo "//10.3.75.8/обменник /mnt/Share cifs domain=mydomen.ru,username=Sasha,password=tytparol,iocharset=utf8,auto,users,file_mode=0777,dir_mode=0777 0 0" >> /etc/fstab[/console]
и сразу же предлагается изменить в ней параметры на нужные...

а потом изменять в ней переменные, на нужные

text
pathshare=//10.3.75.8/обменник
nameshare=/mnt/Share
namedomain=mydomen.ru
loginuser=Sasha
passwduser=tytparol

После введённых пользователем конкретных значений, строка заменяется к примеру на

text
//10.3.78.210/хлам /mnt/pomoyka cifs domain=domenchik.ru,username=Admin,password=zloyparol,iocharset=utf8,auto,users,file_mode=0777,dir_mode=0777

это если пользователь ввёл значения этих переменных в интерактивном режиме:
Например:

Введите полный путь, где лежит папка к общему ресурсу:
//10.3.78.210/хлам
Введите название этой папки:
pomoyka
Введите название домена:
domenchik.ru
Введите логин пользователя:
Admin
Введите пароль пользователя:
zloyparol

и создаётся папка в /mnt так
[console]mkdir /mnt/pomoyka[/console]


Помогите мне с частью этого скрипта. Как написать это участок скрипта?

17.04.2019 16:19 #431461

silenduhom, пожалуйста, используйте BB-коды для выделения кода и команд консоли, иначе остальным тяжело читать. Исправил Вам на первый раз.

17.04.2019 17:55 #431462

silenduhom, А зачем писать строку в файл, а потом пытаться там что-то менять??
Не проще ли сразу при запуске спросить о переменных, а если они небыли введены - записать те что по умолчанию:

text

echo "Введите полный путь, где лежит папка к общему ресурсу:"
read pathshare
if [ !$pathshare ]
    then pathshare='//10.3.75.8/обменник'
    fi

....и т.д. .....

echo -e "$pathshare \t $nameshare \t cifs \t domain=$namedomain,username=$loginuser,password=$passwduser,iocharset=utf8,auto,users,file_mode=0777,dir_mode=0777 \t 0 \t 0" >> /etc/fstab

17.04.2019 22:46 #431463

Спасибо добрый человек
Добавлено: 17.04.2019 22:46:03

DiabloPC,
решил не засовывать в свой скрипт большой, а создал маленький скриптик, решающий мою задачу, но в итоге внутри лежит только этот код:

text

#!/bin/bash
echo "Введите полный путь, где лежит папка к общему ресурсу, соблюдая слэши:"
read pathshare
if [ !$path1share ]
    then pathshare='//10.3.75.3/обменник'
    fi

echo "Введите название папки, совместно с путём точки монтирования, соблюдая слэши, например:" read nameshare if [ !$nameshare ] then nameshare='/mnt/обменник' fi

echo "Введите домен, например: gazprom.ru:" read namedomain if [ !$namedomain ] then namedomain='gazprom.ru' fi

echo "Введите логин пользователя, доступ которому разрешён к общему ресурсу:" read loginuser if [ !$loginuser ] then loginuser='kyabishev' fi

echo "Введите пароль этого пользователя, доступ которому разрешён к общему ресурсу:" read passwduser if [ !$passwduser ] then passwduser='Admin123' fi

$ echo -e "$pathshare \t $nameshare \t cifs \t domain=$namedomain,username=$loginuser,password=$passwduser,iocharset=utf8,auto,users,file_mode=0777,dir_mode=0777 \t 0 \t 0 >> /etc/fstab

И выдаёт ошибку:

Консоль:

text

root@TEST-TEST-TEST:~# bash /home/administrator/Desktop/echo.sh
/home/administrator/Desktop/echo.sh: строка 2: $'\r': команда не найдена
Введите полный путь, где лежит папка к общему ресурсу, соблюдая слэши:
»: это недопустимый идентификаторsh: строка 4: read: «pathshare
/home/administrator/Desktop/echo.sh: строка 33: неожиданный конец файла во время поиска «"»
/home/administrator/Desktop/echo.sh: строка 34: синтаксическая ошибка: неожиданный конец файла

В чём проблема?

17.04.2019 22:59 #431470

"silenduhom" написал:
/home/administrator/Desktop/echo.sh: строка 33: неожиданный конец файла во время поиска «"»
/home/administrator/Desktop/echo.sh: строка 34: синтаксическая ошибка: неожиданный конец файла
Не закрыты кавычки в последней строке.

"silenduhom" написал:
if [ !$path1share ]
Неправильная переменная

Всё остальное нормально выполняется
17.04.2019 23:01 #431471
"silenduhom" написал:
/home/administrator/Desktop/echo.sh: строка 34: синтаксическая ошибка: неожиданный конец файла

Ну тут я думаю нужно добавить в конец

text
exit 0
17.04.2019 23:03 #431472

"silenduhom" написал:
/home/administrator/Desktop/echo.sh: строка 2: $'\r': команда не найдена
А что именно там на второй строке?? Что-то там есть, но сюда оно не попало...
Добавлено: Apr 17 2019 11:03:19 pm

"lone_wolf" написал:
Ну тут я думаю нужно добавить в конец
Ни в коем случае! Так оно даже если будут косяки всеравно будет возвращать 0 , т.е. будет делать вид что всё впорядке. Там просто кавычки не закрыты после echo

Я даже знаю почему они не закрыты:
Потому что это я косякнул (ото нечего такое с телефона писать %) ) в 3-м сообщении, а тс просто скопипастил не перечитывая команду :D
17.04.2019 23:07 #431473
"DiabloPC" написал:
Ни в коем случае! Так оно даже если будут косяки всеравно будет возвращать 0 , т.е. будет делать вид что всё впорядке. Там просто кавычки не закрыты после echo

Согласен, вредный совет дал *SCRATCH*

17.04.2019 23:17 · отредактировано #431474

DiabloPC,
Итак, заново подправил, смотрите:

text

#!/bin/bash
echo "Введите полный путь, где лежит папка к общему ресурсу, соблюдая слэши:"
read pathshare
if [ !$pathshare ]
    then pathshare='//10.3.75.3/обменник'
    fi
echo "Введите название папки, совместно с путём точки монтирования, соблюдая слэши, например:"
read nameshare
if [ !$nameshare ]
    then nameshare='/mnt/обменник'
    fi
echo "Введите домен, например: gazprom.ru:"
read namedomain
if [ !$namedomain ]
    then namedomain='gazprom.ru'
    fi
echo "Введите логин пользователя, доступ которому разрешён к общему ресурсу:"
read loginuser
if [ !$loginuser ]
    then loginuser='1'
    fi
echo "Введите пароль этого пользователя, доступ которому разрешён к общему ресурсу:"
read passwduser
if [ !$passwduser ]
    then passwduser='Admin123'
    fi
echo -e "$pathshare \t $nameshare \t cifs \t domain=$namedomain,username=$loginuser,password=$passwduser,iocharset=utf8,auto,users,file_mode=0777,dir_mode=0777 \t 0 \t 0" >> /etc/fstab

в ответ

text

bash /home/administrator/Desktop/echo.sh
Введите полный путь, где лежит папка к общему ресурсу, соблюдая слэши:
»: это недопустимый идентификаторsh: строка 3: read: «pathshare
/home/administrator/Desktop/echo.sh: строка 28: синтаксическая ошибка: неожиданный конец файла

Что на этот раз?

17.04.2019 23:36 #431475

Попробуйте вот так

text
read -e pathshare
17.04.2019 23:37 #431476

silenduhom, bash случайно не 4.хх??
Если да то тогда вот так:

text
if [ $pathshare == '' ]

В приглашениях [console=inline]echo "bla bla bla"[/console] заменить на [console=inline]echo 'bla bla bla'[/console]

17.04.2019 23:39 #431477

lone_wolf, тоже самое
Добавлено: 17.04.2019 23:39:27

DiabloPC, Astra Linux SE 1.6 bash 4.4-5

17.04.2019 23:41 #431478

"silenduhom" написал:
bash 4.4-5
Тогда смотри выше
Да, кста, можно еще попробовать завернуть переменные в read в кавычки [console=inline]read "pathshare"[/console]
17.04.2019 23:45 #431479

DiabloPC, тоже самое в 3 строке где read и концовка 28 ошибки

17.04.2019 23:49 #431480

Очень интересно, у меня скрипт отрабатывает на ура.
[console]bash --version
GNU bash, версия 4.4.23(1)-release (x86_64-redhat-linux-gnu)

cat /etc/redhat-release
Fedora release 29 (Twenty Nine)

[/console]

17.04.2019 23:50 #431481

lone_wolf, скинь его в файл запущу, может что не так с кодировкой

17.04.2019 23:54 #431482
"DiabloPC" написал:
text
if [ $pathshare == '' ]

Переменную в фигурные скобки надо: [console=inline]${PATHSHARE}[/console], вместо /usr/bin/test (он же '[') надо '[[', заменять нестрогие кавычки на строгие в вызове [console=inline]echo[/console] необязательно.

17.04.2019 23:57 #431483

даже вспомнил в какой виртуалке есть bash4

"Вот так работает"
text
#!/bin/bash
echo "Введите полный путь, где лежит папка к общему ресурсу, соблюдая слэши:"
read "pathshare"
if [ "$pathshare" == "" ]
    then pathshare='//10.3.75.3/обменник'
    fi
echo "Введите название папки, совместно с путём точки монтирования, соблюдая слэши, например:"
read "nameshare"
if [ "$nameshare" == "" ]
    then nameshare='/mnt/обменник'
    fi
echo "Введите домен, например: gazprom.ru:"
read "namedomain"
if [ "$namedomain" == "" ]
    then namedomain='gazprom.ru'
    fi
echo "Введите логин пользователя, доступ которому разрешён к общему ресурсу:"
read "loginuser"
if [ "$loginuser" == "" ]
    then loginuser='1'
    fi
echo "Введите пароль этого пользователя, доступ которому разрешён к общему ресурсу:"
read "passwduser"
if [ "$passwduser" == "" ]
    then passwduser='Admin123'
    fi

17.04.2019 23:58 #431484
silenduhom написал:
lone_wolf, скинь его в файл запущу, может что не так с кодировкой

вот

Показать
17.04.2019 23:59 #431485

yars, такая же фигня, прямо таки бесит эта загадка фараона, может кто-нибудь Astra Linux завиртуалит, хотя бы CE а не SE версию и напишет правильно? Что-то тут не так, ошибка в 3 строке, что не так с bash

Войдите или зарегистрируйтесь, чтобы ответить.