como remover caracteres das variáveis para remover --function option1 option2

0

Eu criei uma função para registrar os resultados de um script e adicionei um argumento ao script. Você pode dar uma olhada no link

Nesse script, adicionei um argumento --screen para iniciar o mesmo script com todos os argumentos em uma tela com a opção -L .

Enable_Screen(){
    Check_Package screen
    ScreenCMD="./pxelinux.sh"
    CMDOptions="$@"
    CMDOptions=${CMDOptions// --screen/}
    CMD="$ScreenCMD $CMDOptions"
    if [ $debug = "true" ]; then
        echo -e "${ORANGE}[DEBUG][EXECUTE] screen -S PXE_Linux -L $CMD ${NORM}"
    fi
    screen -S PXE_Linux -L $CMD
    mv screenlog.0 pxelinux.screen.log
    exit 0
}

Agora, gostaria de adicionar uma opção ao argumento para anexar o log.

um exemplo de como eu executo o script:

./pxelinux.sh --debug --screen --install-pxelinux

Agora este é o exemplo que eu gostaria de usar

./pxelinux.sh --debug --screen append --install-pxelinux

Como esta é uma opção para a função de tela, não quero que ela seja encaminhada para a tela que estou criando. Na função screen, você pode ver que eu removo o --screen da lista de argumentos e agora eu precisaria remover append se ele aparecer nos argumentos. Mas somente se estiver nas opções do argumento --screen . Porque append é uma opção para o argumento --screen e pode ou não estar ativada.

Basicamente, usei essa convenção para meus argumentos: --argument = > executar uma função no script argument = > opção para o --argument

Coloque mais simplesmente:

script.sh

#!/bin/bash

Config_Network(){
    echo -e "
source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
auto eth0
iface eth0 inet static
    address $1
    netmask $2
    gateway $3
" | tee -a /etc/network/interfaces
}

Update_System(){
    Command="apt-get update"; Executing "$Command"
    Command="apt-get upgrade -y"; Executing "$Command"
}

Restart_System(){
    shutdown -r now
}

Check_Package(){
    if [ $(dpkg-query -W -f='${Status}' $1 2>/dev/null | grep -c "ok installed") -eq 0 ];
    then
        Command="apt-get install $1 -y"; Executing "$Command"
    fi
}
Executing(){
    if [ $debug = "true" ]; then
        if eval $1;then
            echo -e "${GREEN}[DEBUG  ][$(date)][SUCCESS][EXECUTING] $1 ${NORM}" | tee -a $logfile
        else
            echo -e "${RED}[DEBUG  ][$(date)][ERROR  ][EXECUTING] $1 ${NORM}" | tee -a $logfile
        fi
    else
        if eval $1;then
            echo -e "${GREEN}[DEBUG  ][$(date)][SUCCESS][EXECUTING] $1 ${NORM}"
        else
            echo -e "${RED}[DEBUG  ][$(date)][ERROR  ][EXECUTING] $1 ${NORM}"
        fi

    fi
}
while test $# -gt 0
do
    case "$1" in
        --config-network)
            netconf
            ;;
        --update)
            Update_System
            ;;
        --restart)
            Restart_System
            ;;
        --*) 
            exit
            ;;
    esac
    shift
done

exit 0

agora, quando executo o script.sh, eu quero ser capaz de passar $ 1 $ 2 $ 3 para a configuração do netconf, não importa onde ele esteja na declaração.

./script.sh --config-network 10.10.10.10 255.255.255.0 10.10.10.1 --update --restart
./script.sh --restart --config-network 10.10.10.10 255.255.255.0 10.10.10.1 --update
./script.sh --update --restart --config-network 10.10.10.10 255.255.255.0 10.10.10.1 --update
    
por Louis Ouellet 21.02.2018 / 23:23

1 resposta

0

Eu encontrei uma solução para o meu problema testando os 3 argumentos a seguir, se eles contiverem -- neles. E como neste caso eu estava procurando por IPs e máscara, adicionei um segundo teste para isso. Portanto, o primeiro if valida que os seguintes argumentos não são funções no script e, em seguida, o segundo if valida os argumentos que desejo passar para a função.

    --config-network)
        if [[ $2 != *--* && $3 != *--* && $4 != *--* ]]; then
            if [[ $2 =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ && $3 =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ && $4 =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
                Config_Network $2 $3 $4
            else
                Config_Network
            fi
        else
            echo "Bad [argument] $1 $2 $3 $4"
            Display_Help
            exit
        fi
        ;;
    
por 22.02.2018 / 08:38