[Решено] Скрипт для монтирования сетевого ресурса

Автор Роман846, 06 августа 2014, 15:43:00

« назад - далее »

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

Роман846

Привет всем! Написал не большой скриптик, который монтирует сетевой ресурс, но при запуске он пишет что уже смонтировано, хотя это не так. Условие вроде правильное. В чем проблема?

#!/bin/bash

echo -e "\e[33m  Проверяю доступность сервера...\e[0m"
ping -c 3 fs2-n >/dev/null 2>&1

if [ $? -eq 0 ]; then
  echo -e "\e[32m  Сервер доступен! =) \e[0m"
else
  sleep 1
  echo -e "\e[31m Сервер не доступен! =( \e[0m"
  exit
fi
sleep 1
if [ -e /mnt/fs2-n ]; then
  echo -e "\e[32m Точка монтирования обнаружена! \e[0m"
else
  echo -e "\e[31m Точка монтирования не обнаружена! Создаю... \e[0m"
  mkdir /mnt/fs2-n
fi

cd /mnt/fs2-n/1c > /dev/null 2>&1
echo $?
sleep 1
if [ $? -eq 0 ]; then
echo -e "\e[31m Смонтировано! \e[0m"
  exit
else
   echo -e "\e[33m  Монтирую в /mnt/fs2-n \e[0m"
   mount -t cifs -o username=user,password=password,iocharset=utf8,file_mode=0777,dir_mode=0777 //fs2-n/"Отдел информационных технологий" /mnt/fs2-n
   sleep 1
   echo -e "\e[32m  Готово! \e[0m"
exit 0
fi
[code]
Спасибо!
Acer Aspire 5750G Debian 10(buster) XFCE4
  •  

yura_n

Вероятно вот в этом условии:

if [ $? -eq 0 ]; then

Если предыдущая команда выполнена корректно, то в любом случае вернется 0.
  •  

Роман846

#2
Цитата: yura_n от 06 августа 2014, 16:28:29
Вероятно вот в этом условии:

if [ $? -eq 0 ]; then

Если предыдущая команда выполнена корректно, то в любом случае вернется 0.
Но при выполнении команды cd /mnt/fs2-n/1c возвращается 1. Значит он должен монтировать.
Acer Aspire 5750G Debian 10(buster) XFCE4
  •  

yura_n

Цитата: Роман846 от 06 августа 2014, 16:35:07
Но при выполнении команды cd /mnt/fs2-n/1c возвращается 1. Значит он должен монтировать.
Вы получаете код завершения последней команды, а у вас команда sleep перед условием.
  •  

Роман846

Цитата: yura_n от 06 августа 2014, 16:38:53
Цитата: Роман846 от 06 августа 2014, 16:35:07
Но при выполнении команды cd /mnt/fs2-n/1c возвращается 1. Значит он должен монтировать.
Вы получаете код завершения последней команды, а у вас команда sleep перед условием.
Ничего подобного. Без Sleep тоже самое.
Acer Aspire 5750G Debian 10(buster) XFCE4
  •  

yura_n

В переменную значение сохраните:

TEMPVAR=$?

И попробуйте сравнить с переменной:

if [ $TEMPVAR -eq 0 ]; then
  •  

Yrii

Роман846, У тебя скрипт, в условииях, проверяет наличия файла, а не каталога if [ -e Надо e заменить на d
  •  

Роман846

Все поправил как говорили, но все осталось прежним.

Вывод:
sudo bin/mosa
  Проверяю доступность сервера...
  Сервер доступен! =)
Точка монтирования обнаружена!
0
Смонтировано!

Хотя ничего не смонтировано!
Acer Aspire 5750G Debian 10(buster) XFCE4
  •  

endru

Цитата: Роман846 от 11 августа 2014, 08:06:47Все поправил как говорили, но все осталось прежним.
показывайте как выглядит код сейчас!

Роман846

Цитата: endru от 11 августа 2014, 10:29:26
Цитата: Роман846 от 11 августа 2014, 08:06:47Все поправил как говорили, но все осталось прежним.
показывайте как выглядит код сейчас!

#!/bin/bash
TEMPVAR=$?

echo -e "\e[33m  Проверяю доступность сервера...\e[0m"
ping -c 3 fs2-n >/dev/null 2>&1

if [ $TEMPVAR -eq 0 ]; then
  echo -e "\e[32m  Сервер доступен! =) \e[0m"
else
  sleep 1
  echo -e "\e[31m Сервер не доступен! =( \e[0m"
  exit
fi
sleep 1
if [ -d /mnt/fs2-n ]; then
  echo -e "\e[32m Точка монтирования обнаружена! \e[0m"
else
  echo -e "\e[31m Точка монтирования не обнаружена! Создаю... \e[0m"
  mkdir /mnt/fs2-n
fi

  cd /mnt/fs2-n/1c > /dev/null 2>&1
  echo $TEMPVAR
if [ $TEMPVAR -eq 0 ]; then
  echo -e "\e[31m Смонтировано! \e[0m"
  exit
else
  echo -e "\e[33m  Монтирую в /mnt/fs2-n \e[0m"
  mount -t cifs -o username=ovt111,password=789123,iocharset=utf8,file_mode=0777,dir_mode=0777 //fs2-n/"Отдел информационных технологий" /mnt/fs2-n
  sleep 1
  echo -e "\e[32m  Готово! \e[0m"
  exit 0
fi
Acer Aspire 5750G Debian 10(buster) XFCE4
  •  

endru

#10
полная каша в вашем скрипте!
TEMPVAR всегда будет равен нулю!  :D
лучше запихивайте проверку в само условие, на подобии:
if [[ "$(ping -c 3 fs2-n)" ]]
then
  echo -e "\e[32m  Сервер доступен! =) \e[0m"
else
  sleep 1
  echo -e "\e[31m Сервер не доступен! =( \e[0m"
  exit 1
fi

Yrii

сэмулировал пару директорий... вроде отработало всё как надо...
#!/bin/bash

echo -e "\e[33m  Проверяю доступность сервера...\e[0m"
ping -c 1 192.168.1.1 > /dev/null 2>&1
x="$?"
echo $x
if [ $x -eq 0 ]; then
  echo -e "\e[32m  Сервер доступен! =) \e[0m"
else
  echo -e "\e[31m Сервер не доступен! =( \e[0m"
fi

sleep 1

if [ -d /mnt/test1 ]; then
  echo -e "\e[32m Точка монтирования обнаружена! \e[0m"
else
  echo -e "\e[31m Точка монтирования не обнаружена! Создаю... \e[0m"
  mkdir /mnt/test1
fi

cd /mnt/test1/1c > /dev/null 2>&1
y="$?"
echo $y

if [ $y -eq 0 ]; then
  echo -e "\e[31m Смонтировано! \e[0m"
else
  echo -e "\e[33m  Тут команда монтирования.... \e[0m"
  notify-send -i -t 10000 "Тут команда монтирования"
  sleep 1
  echo -e "\e[32m  Смонтированно! Конец \e[0m"
fi
  •  

Роман846

#12
Спасибо! Если писать сразу в условии, то норм! Вот только как можно сделать так чтобы вывод cd /mnt/fs2-n/1c не выводился на экран, а то как то не красиво).

Проверяю доступность сервера...
  Сервер доступен! =)
Точка монтирования обнаружена!
bin/mosa: line 22: cd: /mnt/fs2-n/1c: Нет такого файла или каталога
  Монтирую в /mnt/fs2-n
  Готово!


#!/bin/bash
echo -e "\e[33m  Проверяю доступность сервера...\e[0m"

if [[ "$(ping -c 3 fs2-n)" ]]; then
  echo -e "\e[32m  Сервер доступен! =) \e[0m"
else
  sleep 1
  echo -e "\e[31m Сервер не доступен! =( \e[0m"
  exit 1
fi
sleep 1
if [ -d /mnt/fs2-n ]; then
  echo -e "\e[32m Точка монтирования обнаружена! \e[0m"
else
  echo -e "\e[31m Точка монтирования не обнаружена! Создаю... \e[0m"
  mkdir /mnt/fs2-n
fi

if [[ "$(cd /mnt/fs2-n/1c)" ]]; then
  echo -e "\e[31m Смонтировано! \e[0m"
  exit 1
else
  echo -e "\e[33m  Монтирую в /mnt/fs2-n \e[0m"
  mount -t cifs -o username=ovt111,password=789123,iocharset=utf8,file_mode=0777,dir_mode=0777 //fs2-n/"Отдел информационных технологий" /mnt/fs2-n
  sleep 1
  echo -e "\e[32m  Готово! \e[0m"
  exit 0
fi
Acer Aspire 5750G Debian 10(buster) XFCE4
  •  

endru

Цитата: Роман846 от 11 августа 2014, 14:00:37Вот только как можно сделать так чтобы вывод cd /mnt/fs2-n/1c не выводился на экран, а то как то не красиво).
что мешает проверять условием:
if [ -d /mnt/fs2-n/1c ]

Роман846


#!/bin/bash

echo -e "\e[33m  Проверяю доступность сервера...\e[0m"

if [[ "$(ping -c 3 fs2-n)" ]]; then
  echo -e "\e[32m  Сервер доступен! =) \e[0m"
else
  sleep 1
  echo -e "\e[31m Сервер не доступен! =( \e[0m"
  exit 1
fi
sleep 1
if [ -d /mnt/fs2-n ]; then
  echo -e "\e[32m Точка монтирования обнаружена! \e[0m"
else
  echo -e "\e[31m Точка монтирования не обнаружена! Создаю... \e[0m"
  mkdir /mnt/fs2-n
fi

  #cd /mnt/fs2-n/1c > /dev/null 2>&1

if [ -d /mnt/fs2-n/1c ]; then
  echo -e "\e[31m Смонтировано! \e[0m"
  exit 0
else
  echo -e "\e[33m  Монтирую в /mnt/fs2-n \e[0m"
  mount -t cifs -o username=ovt111,password=789123,iocharset=utf8,file_mode=0777,dir_mode=0777 //fs2-n/"Отдел информационных технологий" /mnt/fs2-n
  sleep 1
  echo -e "\e[32m  Готово! \e[0m"
  exit 0
fi

Если уже смонтировано, то он снова монтирует (

sudo bin/mosa
  Проверяю доступность сервера...
  Сервер доступен! =)
Точка монтирования обнаружена!
  Монтирую в /mnt/fs2-n
mount error(16): Device or resource busy
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
  Готово!

Он же должен сказать, что уже смонтировано!
Acer Aspire 5750G Debian 10(buster) XFCE4
  •