Проверка сценария оболочки с помощью моделирования терминала

Я разрабатываю общий сценарий bash, который может быть выполнен в разных дистрибутивах.

У меня есть только виртуальная машина CentOS, и мне было бы интересно протестировать мой скрипт на виртуальном терминале (онлайн или как программное обеспечение, без письменного доступа, просто умеющего читать некоторые стандартные файлы из ОС), но, как я запускаю его в другом distro (возможность переключения между дистрибутивом).

Один пример – сделать обнаружение дистрибутива, и я не знаю, какая будет ожидаемая информация, которую я получу от другого дистрибутива.

Например, на моей виртуальной машине я получаю:

$> test.sh Your linux distribution is: CentOS $> 

Я просто не знаю, что будет результатом RedHat, Ubuntu, Debian и т. Д.

Код для test.sh находится здесь .

Эта идея исходит от разработки интерфейса, где у вас есть аналогичные инструменты для тестирования ваших веб-страниц в разных браузерах, не имея на самом деле все. Я знаю, что ОС довольно сложна, чем просто браузер, но вопрос остается после нескольких поисков в Google.

3 Solutions collect form web for “Проверка сценария оболочки с помощью моделирования терминала”

Как сказал Крис Даун в комментариях, обнаружение распределения действительно плохой способ обнаружения системы пакетов. Например, вы упомянули «REDHAT + CENTOS + FEDORA = rpm + yum support, а DEBIAN + UBUNTU = deb + apt-get». Хорошо, что насчет Mint, LMDE, Kali, Backtrack, Crashbang и всех других дистрибутивов с использованием dpkg / apt-get ? Или Scientific Linux, Yellow Dog Linux и Oracle Linux, все из которых используют yum ? Не говоря уже о других дистрибутивах на основе RPM, которые не используют yum такие как SuSe, OpenSuSe, Mandriva Linux, Rosa Linux или Mageia?

Лучше всего было бы найти инструмент, который вы хотите использовать. Я также предлагаю вам использовать систему rpm напрямую, а не yum , зачем ограничивать себя дистрибутивами на основе 6 RPM, которые используют yum ?

Я бы просто протестировал, если система, которую вы обнаружите, использует rpm или dpkg для управления своими пакетами:

 if [ $(rpm -qa 2>/dev/null | wc -l ) -gt 10 ]; then system="rpm" elif [ $(dpkg -l 2>/dev/null | wc -l ) -gt 10 ]; then system="dpkg" else system="unk" fi echo $system 

Поскольку rpm можно установить на дистрибутивы на основе dpkg и наоборот , я проверяю, установлено ли более 10 пакетов с каждым инструментом.

Для лучшего способа определить фактическое распределение см. Здесь принятый ответ, который должен дать вам представление о том, насколько он сложный. Вы действительно хотите написать тесты, связанные с дистрибутивом, для десятков дистрибутивов, когда вы легко можете просто определить используемую систему упаковки?

питон

 #!/usr/bin/env python import platform """ Fingerprint the following operating system * Mac OS X * Ubuntu * Red Hat/CentOS * FreeBSD * SunOS """ class OpSysType(object): """ Determine OS type using platform module """ def __getattr__(self,attr): if attr == "osx": return "Mac OS X" elif attr == "rhel": return "redhat" elif attr == "ubu": return "ubuntu" elif attr == "fbsd": return "FreeBSD" elif attr == "sun": return "SunOS" elif attr == "unknown": return "unknown" else: raise AttributeError,attr def linuxtype(self): """ Use various method to determine Linux Type """ if platform.dist()[0] == self.rhel: return self.rhel elif platform.uname()[1] == self.ubu: return self.ubu else: return self.unknown def queryos(self): p = platform.system() if p == "Darwin": return self.osx elif p == "Linux": return self.linuxtype() elif p == self.sun: return self.sun elif p == self.fbsd: return self.fbsd def fingerprint(): type = OpSysType() print type.queryos() if __name__ == '__main__': fingerprint() 

Вы можете легко сделать это с помощью uname:

 OS=`uname` if [ "$OS" == "Linux" ];then distro="Linux" elif[ "$OS" == "SunOS" ];then distro="Solaris" else echo "CRITICAL - Unknown os" exit 2 
  • Альтернативный источник для пакета, удаленный из тестирования или нестабильной репо
  • Где можно найти инструменты для проверки целостности хранилища (записи / чтения)?
  • почему iozone не генерирует выходной файл?
  • Как написать тест для входа в систему?
  • Файловая система fio повреждена (XFS на mdadm, RAID10)?
  • генерировать трафик на скорости
  • создать поврежденную файловую систему FAT
  • Как обновить стабильный Debian (Wheezy) до тестирования (Jessie)?
  • Мне нужно найти 1 простой руткит для проверки chkrootkit в centos?
  • Создание локального собственного веб-сервера тестирования
  • Использование ping на нескольких интерфейсах в NIC
  • Interesting Posts

    Внешний монитор VGA исчез из списка опций дисплея

    Программа, которая передает STDIN в STDOUT с разделителями цветовых кодов?

    Карта DNS-запросов, поступающих с определенного клиентского MAC с помощью dnsmasq

    Невозможно удалить файлы для мусора в подключенной файловой системе

    Рассчитать и разделить на общую сумму AWK

    Как установить активный язык клавиатуры с помощью команды?

    Как sudo решает, является ли команда только исполняемой sudoers со всеми правами?

    Как загрузить файлы и папки из Onedrive с помощью wget?

    Повторное нажатие клавиш, которые генерируют несколько кодов сканирования

    Что установлено как / on initramfs, когда указанный корень недоступен?

    Начать sh в указанной директории из inittab

    Сообщение при загрузке: «не может выделить ресурс памяти »

    Домашние каталоги и pam.d с использованием LDAP

    Ssh на несколько серверов и объединить файлы в один

    Тип 1 Гипервизор аппаратных привилегий, используйте драйверы хоста.

    Linux и Unix - лучшая ОС в мире.