Что означают эти выражения, использующие логические операторы внутри цикла while?

Вот пример сценария оболочки (убедитесь, что вы заменили имя MATH именем вашего приложения):

#!/bin/bash

### BEGIN INIT INFO
# Provides:                 MATH
# Required-Start:           $java
# Required-Stop:            $java
# Short-Description:        Start and stop MATH service.
# Description:              -
# Date-Creation:            -
# Date-Last-Modification:   -
# Author:                   -
### END INIT INFO

# Variables
PGREP=/usr/bin/pgrep
JAVA=/usr/bin/java
ZERO=0

# Start the MATH
start() {
    echo "Starting MATH..."
    #Verify if the service is running
    $PGREP -f MATH > /dev/null
    VERIFIER=$?
    if [ $ZERO = $VERIFIER ]
    then
        echo "The service is already running"
    else
        #Run the jar file MATH service
        $JAVA -jar /opt/MATH/MATH.jar > /dev/null 2>&1 &
        #sleep time before the service verification
        sleep 10
        #Verify if the service is running
        $PGREP -f MATH  > /dev/null
        VERIFIER=$?
        if [ $ZERO = $VERIFIER ]
        then
            echo "Service was successfully started"
        else
            echo "Failed to start service"
        fi
    fi
    echo
}

# Stop the MATH
stop() {
    echo "Stopping MATH..."
    #Verify if the service is running
    $PGREP -f MATH > /dev/null
    VERIFIER=$?
    if [ $ZERO = $VERIFIER ]
    then
        #Kill the pid of java with the service name
        kill -9 $($PGREP -f MATH)
        #Sleep time before the service verification
        sleep 10
        #Verify if the service is running
        $PGREP -f MATH  > /dev/null
        VERIFIER=$?
        if [ $ZERO = $VERIFIER ]
        then
            echo "Failed to stop service"
        else
            echo "Service was successfully stopped"
        fi
    else
        echo "The service is already stopped"
    fi
    echo
}

# Verify the status of MATH
status() {
    echo "Checking status of MATH..."
    #Verify if the service is running
    $PGREP -f MATH > /dev/null
    VERIFIER=$?
    if [ $ZERO = $VERIFIER ]
    then
        echo "Service is running"
    else
        echo "Service is stopped"
    fi
    echo
}

# Main logic
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status
        ;;
    restart|reload)
        stop
        start
        ;;
  *)
    echo $"Usage: $0 {start|stop|status|restart|reload}"
    exit 1
esac
exit 0
0
задан smci 4 March 2019 в 02:29
поделиться

1 ответ

Другой часто разумный шаг к пониманию того, что делает конкретная строка кода или функция, состоит в том, чтобы отобразить это на графике; поскольку ваш цикл while просто увеличивает c каждый шаг, а затем вычисляет c1 и c2 на основе этих c значений, мы можем написать две функции

func_c1 <- function(c) c - (c > 2) * 2
func_c2 <- function(c) 1 * (c < 3) + 2 * (c > 2)

, которые возвращают c1 и c2 соответственно, для разных значений c.

Затем мы можем построить графики c1 и c2 для различных значений c; ваш цикл while учитывает c = 1:4:

data.frame(c = 1:4, c1 = func_c1(1:4), c2 = func_c2(1:4)) %>%
    gather(param, val, -c) %>%
    ggplot(aes(c, val, colour = param)) +
    geom_point() +
    geom_line()

enter image description here

0
ответ дан Maurits Evers 4 March 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: