Arhn - архитектура программирования

Bash, если ping, то иначе My else не работает

У меня есть сценарий bash, который должен работать в зависимости от того, могу ли я пропинговать свой сетевой адрес или нет. Будут случаи, когда этот скрипт запускается за пределами моей сети, и в этом случае я не хочу, чтобы он запускался. Поэтому я собрал это

if ping -c 1 xxx.xxx.x.x > /dev/null; then

Когда он находится в сети, оператор «тогда» работает просто отлично. Однако всякий раз, когда я выключаю свою беспроводную карту и отсоединяю кабель Ethernet, чтобы проверить «иначе», мой оператор else никогда не выполняется. Есть ли другой способ, которым я должен написать это?

Вот полный сценарий;

#!/bin/bash

computerid=`/usr/sbin/scutil --get LocalHostName`

# Standard parameters
domain="xxx.xxxxxxx.xxx"                            # fully qualified DNS name of Active Directory Domain
udn="xxxxxx"                                            # username of a privileged network user
password="xxxxxx"                                           # password of a privileged network user
ou="OU=MacOS,DC=xxx,DC=xxxxxxx,DC=xxx"              # Distinguished name of container for the computer

# Advanced options
alldomains="enable"                 # 'enable' or 'disable' automatic multi-domain authentication
localhome="enable"                  # 'enable' or 'disable' force home directory to local drive
protocol="smb"                              # 'afp' or 'smb' change how home is mounted from server
mobile="enable"                         # 'enable' or 'disable' mobile account support for offline logon
mobileconfirm="disable"             # 'enable' or 'disable' warn the user that a mobile acct will be created
useuncpath="enable"                 # 'enable' or 'disable' use AD SMBHome attribute to determine the home dir
user_shell="/bin/bash"              # e.g., /bin/bash or "none"
preferred="-preferred xxx.xxxxxx.xxx"       # Use the specified server for all Directory lookups and authentication
# (e.g. "-nopreferred" or "-preferred ad.server.edu")
admingroups="xxx\domain admins,xxx\enterprise admins,xxx\teacher98,xxx\ADManagement - Computers,xxx\admin employees"        # These comma-separated AD groups may administer the machine (e.g. "" or "APPLE\mac admins")

### End of configuration

# Delay the login window by unloading the com.apple.loginwindow
# LaunchDaemon in /System/Library/LaunchDaemons/

launchctl unload -w /System/Library/LaunchDaemons/com.apple.loginwindow.plist


## Wait until all network services are up.
sleep 10

# Check to see if we're in the district
if ping -c 1 xxx.xxx.x.x > /dev/null; then


    #make sure time is set correctly
    ntpdate -u time.xxxxxxx.xxx


    # Activate the AD plugin
    defaults write /Library/Preferences/DirectoryService/DirectoryService "Active Directory" "Active"
    plutil -convert xml1 /Library/Preferences/DirectoryService/DirectoryService.plist
    sleep 5

    # Remove computer from OU
    dsconfigad -f -r -u xxxxxx -p xxxxxx
    sleep 5

    # Bind to AD
    dsconfigad -f -a $computerid -domain $domain -u $udn -p "$password" -ou "$ou"

    # Configure advanced AD plugin options
    if [ "$admingroups" = "" ]; then
        dsconfigad -nogroups
    else
        dsconfigad -groups "$admingroups"
    fi

    dsconfigad -alldomains $alldomains -localhome $localhome -protocol $protocol \
        -mobile $mobile -mobileconfirm $mobileconfirm -useuncpath $useuncpath \
        -shell $user_shell $preferred

    # Restart DirectoryService (necessary to reload AD plugin activation settings)
    killall DirectoryService

    # Add the AD node to the search path
    if [ "$alldomains" = "enable" ]; then
        csp="/Active Directory/All Domains"
    else
        csp="/Active Directory/$domain"
    fi

    # This works in a pinch if the above code does not
    defaults write /Library/Preferences/DirectoryService/SearchNodeConfig "Search Node Custom Path Array" -array "/Active Directory/All Domains"
    defaults write /Library/Preferences/DirectoryService/SearchNodeConfig "Search Policy" -int 4
    defaults write /Library/Preferences/DirectoryService/ContactsNodeConfig "Search Node Custom Path Array" -array "/Active Directory/All Domains"
    defaults write /Library/Preferences/DirectoryService/ContactsNodeConfig "Search Policy" -int 4

    plutil -convert xml1 /Library/Preferences/DirectoryService/SearchNodeConfig.plist

    ## Remove the script and launchd job. Be sure to delete the script. 
    rm /Library/LaunchDaemons/com.xxxx.adbind.plist
    rm /usr/local/bin/adbind.bash
    launchctl unload -w /Library/LaunchDaemons/com.xxxx.adbind.plist

    # Remove the loginwindow delay by loading the com.apple.loginwindow   
    # LaunchDaemon in /System/Library/LaunchDaemons/

    launchctl load -wF /System/Library/LaunchDaemons/com.apple.loginwindow.plist

    exit 0

else

    echo "District not Available Quitting"

    # Remove the loginwindow delay by loading the com.apple.loginwindow   
    # LaunchDaemon in /System/Library/LaunchDaemons/

    launchctl load -wF /System/Library/LaunchDaemons/com.apple.loginwindow.plist

fi

exit 1

Спасибо за любые предложения!

04.10.2012

  • Как ведет себя ping, если запустить его из командной строки в этих условиях? 04.10.2012
  • $ ping -c 1 xxx.xxx.x.x PING xxx.xxx.x.x (xxx.xxx.x.x): 56 байт данных ping: sendto: нет маршрута к хосту --- xxx.xxx.x.x статистика пинга --- 1 пакетов передано, получено 0 пакетов, 100,0% потери пакетов 04.10.2012
  • Да, но какой код выхода? 04.10.2012
  • Извините, я собираюсь показать свое истинное невежество, я не знаю, как создать код выхода. Это что-то простое, что я могу сделать? Я читал ping man, но не могу понять, как это сделать. 05.10.2012
  • запустите его, затем if [ $? ]; then echo true; else echo false; fi 05.10.2012
  • Поместите set -xv в начало вашей программы. Это включит отладку и покажет вам каждую выполненную строку и то, как эта строка интерполируется через оболочку перед ее выполнением. В большинстве случаев ваша ошибка будет бросаться вам в глаза. По крайней мере, он подтвердит, что вы выполняете оператор if, а не переходите к предложению else. Не то, чтобы оператор if пропускается или предложение else выполняется, но не делает то, что, по вашему мнению, должно делать. 05.10.2012
  • Хорошо, спасибо за терпение. Когда я проверяю код выхода, подобный этому, ping -c 1 xxx.xxx.x.x › /dev/null if [ $? ]; затем эхо истинно; иначе эхо-ложь; fi я получаю ответ true, независимо от того, находится ли он в сети или вне сети. 05.10.2012
  • if [ $? ] всегда будет верным. Все, что нужно сделать, это проверить, имеет ли $? вывод (в этом примере это будет синтаксическая ошибка, если это не так). 05.10.2012
  • Хорошо, Дэвид. Ваше предложение использовать set -xv очень помогло, но мне также пришлось удалить операторы выгрузки launchctl, чтобы посмотреть, как работает скрипт. Похоже, что оператор else работает, но по какой-то причине он не выполняет команду launchctl load -wF /System/Library/LaunchDaemons/com.apple.loginwindow.plist 05.10.2012

Ответы:


1

Возможно, вам придется использовать тайм-аут (-W) man ping

04.10.2012
  • Извините, Науэль, это не помогло моему сценарию. Я ценю эту мысль. 05.10.2012
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..