Script interativo do Bash

2

É possível fornecer mais de uma variável para ser executada no primeiro prompt? No primeiro prompt eu gostaria de fornecer 1 ou 2 até 5 variáveis que estão executando um script específico dentro de uma sessão.

por exemplo:

echo -n "Enter the script you want to launch and press [ENTER]
read script

em vez de $ script, gostaria de ter alguma alternativa como

leia script1 ou script2 ... até script5

que me permite executar com esta entrada única qualquer número de script que eu quero, e em qualquer combinação (por exemplo, 1 e 2, 1 e 3 e 5, etc)

echo "Hello, "$USER".  This script will allow you to start $
echo "1. Claymore ZEC v12.6"
echo "2. Claymore ETH & SIA v10"
echo "3. Claymore ETH  v10"
echo "4. XMRIG ETN v2.4.4 //etn-pool.proxpool"
echo "5. XMRIG ETN v2.4.4 //pool.etn.spacepools.org"
echo "6. Quit"
echo -n "Enter the script you want to launch and press [ENT$
read script
case $script in
1) 
  echo "Starting to mine ZEC."
  cd ~/Downloads/claymore.s.Zcash.v12.6/;
  ./mine.sh;
  ;;
2)
  echo "Starting to mine ETH & SIA."
  cd ~/Downloads/claymore.dualminer.v10_ETHSIA/;
  ./mine.sh;
  ;;
3)
  echo "Starting to mine ETH."
  cd ~/Downloads/claymore.dualminer.v10_ETHSIA/;
  ./mineETH.sh;
  ;;
4)
  echo "Starting to mine ETN."
  cd ~/Downloads/Electroneum/XMRIG/build/;
  sudo sysctl -w vm.nr_hugepages=128;
  clear;
  cat /proc/meminfo | grep Huge;
  ./mine.sh;
  ;;
5)
  echo "Starting to mine ETN."
  cd ~/Downloads/Electroneum/XMRIG/build/;
  sudo sysctl -w vm.nr_hugepages=128;
  clear;
  cat /proc/meminfo | grep Huge;
  ./mine_space.sh;
  ;;
6) 
  echo "Quit"
  ;;
esac
    
por Harry Keogh 22.01.2018 / 13:21

2 respostas

1

Eu joguei um para você baseado no comentário deixado pelo @steeldriver. Este é apenas um script de linha de comando que permite múltiplas entradas na linha de comando. Ele usa getopts para várias opções, além de adicionar nohup command & para mover os scripts para o segundo plano para que o próximo caso possa ser executado.

Para mais ajuda, pesquise na internet por bash getopts. Há muito o que aprender lá fora e você pode fazer scripts incríveis para fazer o que quiser.

O script:

#!/bin/bash

#Set name
NAME=$(basename $0)

#Set option choices
OPTS="h12345"
PUSAGE=""

#This is how to use the script
usage="
Hello, "$USER".  This script will allow you to start the following. 
You can run as many as you like starting with a '-'.  Example below.

Usage:  ${NAME} [OPTIONS]

Options are:
  -h  Show this message.
  -1. Claymore ZEC v12.6
  -2. Claymore ETH & SIA v10
  -3. Claymore ETH  v10
  -4. XMRIG ETN v2.4.4 //etn-pool.proxpool
  -5. XMRIG ETN v2.4.4 //pool.etn.spacepools.org

Example:

${NAME} -135
"

#Run script
while getopts :${OPTS} i ; do
    case $i in
    1) 
      echo "Starting to mine ZEC."
      cd ~/Downloads/claymore.s.Zcash.v12.6/
      nohup ./mine.sh & 2>&1>/dev/null;;
    2)
      echo "Starting to mine ETH & SIA."
      cd ~/Downloads/claymore.dualminer.v10_ETHSIA/
      nohup ./mine.sh & 2>&1>/dev/null;;
    3)
      echo "Starting to mine ETH."
      cd ~/Downloads/claymore.dualminer.v10_ETHSIA/
      nohup ./mineETH.sh & 2>&1>/dev/null;;
    4)
      echo "Starting to mine ETN."
      cd ~/Downloads/Electroneum/XMRIG/build/
      sudo sysctl -w vm.nr_hugepages=128
      clear
      cat /proc/meminfo | grep Huge
      nohup ./mine.sh & 2>&1>/dev/null;;
    5)
      echo "Starting to mine ETN."
      cd ~/Downloads/Electroneum/XMRIG/build/
      sudo sysctl -w vm.nr_hugepages=128
      clear
      cat /proc/meminfo | grep Huge
      nohup ./mine_space.sh & 2>&1>/dev/null;;
    h | \?) PUSAGE=1;;
    esac
done

#Show help based on selection
if [ ${PUSAGE} ]; then
    echo "${usage}"
    exit 0
fi

#Check for input if none show help.
if [[ $1 == "" ]]; then
    echo "${usage}"
    exit 0
fi

Agora, se você executar o script com nada após ou -h para ajuda, aparecerá o seguinte. Eu nomeei meu script askhelp.bsh apenas como um exemplo.

~$ ./askhelp.bsh

Hello, terrance.  This script will allow you to start the following. 
You can run as many as you like separated by spaces and dashes. Example below.

Usage:  askhelp.bsh [OPTIONS]

Options are:
  -h  Show this message.
  -1. Claymore ZEC v12.6
  -2. Claymore ETH & SIA v10
  -3. Claymore ETH  v10
  -4. XMRIG ETN v2.4.4 //etn-pool.proxpool
  -5. XMRIG ETN v2.4.4 //pool.etn.spacepools.org

Example:

askhelp.bsh -135

Em seguida, no meu script de teste, fiz com que as linhas sejam exibidas para mostrar que estão em execução.

Exemplos:

~$ ./askhelp.bsh -135
Starting Option 1
Starting to mine ZEC.
cd ~/Downloads/claymore.s.Zcash.v12.6/
nohup ./mine.sh & 2>&1>/dev/null
Starting Option 3
Starting to mine ETH.
cd ~/Downloads/claymore.dualminer.v10_ETHSIA/
nohup ./mineETH.sh & 2>&1>/dev/null
Starting Option 5
Starting to mine ETN.
cd ~/Downloads/Electroneum/XMRIG/build/
sudo sysctl -w vm.nr_hugepages=128
clear
cat /proc/meminfo | grep Huge
nohup ./mine_space.sh & 2>&1>/dev/null

Outro exemplo:

~$ ./askhelp.bsh -24
Starting Option 2
Starting to mine ETH & SIA.
cd ~/Downloads/claymore.dualminer.v10_ETHSIA/
nohup ./mine.sh & 2>&1>/dev/null
Starting Option 4
Starting to mine ETN.
cd ~/Downloads/Electroneum/XMRIG/build/
sudo sysctl -w vm.nr_hugepages=128
clear
cat /proc/meminfo | grep Huge
nohup ./mine.sh & 2>&1>/dev/null

Novo script da solicitação:

Esse script deve abrir um novo gnome-terminal para cada escolha feita para rastreamento. Os comandos são feitos para gnome-terminal . Se você decidir usar um terminal diferente, certifique-se de fazer as alterações apropriadas no comando em cada instrução de caso.

#!/bin/bash

#Set name
NAME=$(basename $0)

#Set option choices
OPTS="h12345"
PUSAGE=""

#This is how to use the script
usage="
Hello, "$USER".  This script will allow you to start the following. 
You can run as many as you like starting with a '-'.  Example below.

Usage:  ${NAME} [OPTIONS]

Options are:
  -h  Show this message.
  -1. Claymore ZEC v12.6
  -2. Claymore ETH & SIA v10
  -3. Claymore ETH  v10
  -4. XMRIG ETN v2.4.4 //etn-pool.proxpool
  -5. XMRIG ETN v2.4.4 //pool.etn.spacepools.org

Example:

${NAME} -135
"

#Run script
while getopts :${OPTS} i ; do
    case $i in
    1) 
      gnome-terminal -x bash -c 'echo "Starting to mine ZEC."; cd ~/Downloads/claymore.s.Zcash.v12.6/; ./mine.sh';;
    2)
      gnome-terminal -x bash -c 'echo "Starting to mine ETH & SIA."; cd ~/Downloads/claymore.dualminer.v10_ETHSIA/; ./mine.sh';;
    3)
      gnome-terminal -x bash -c 'echo "Starting to mine ETH."; cd ~/Downloads/claymore.dualminer.v10_ETHSIA/; ./mineETH.sh';;
    4)
      gnome-terminal -x bash -c 'echo "Starting to mine ETN."; cd ~/Downloads/Electroneum/XMRIG/build/; sudo sysctl -w vm.nr_hugepages=128; clear; cat /proc/meminfo | grep Huge; ./mine.sh';;
    5)
      gnome-terminal -x bash -c 'echo "Starting to mine ETN."; cd ~/Downloads/Electroneum/XMRIG/build/; sudo sysctl -w vm.nr_hugepages=128; clear; cat /proc/meminfo | grep Huge; ./mine_space.sh';;
    h | \?) PUSAGE=1;;
    esac
done

#Show help based on selection
if [ ${PUSAGE} ]; then
    echo "${usage}"
    exit 0
fi

#Check for input if none show help.
if [[ $1 == "" ]]; then
    echo "${usage}"
    exit 0
fi

Espero que isso ajude!

    
por Terrance 22.01.2018 / 18:24
1

Você pode usar o comando bash read para obter vários parâmetros do usuário.

O exemplo abaixo foi retirado do tutorial de entrada do bash

O script abaixo lê três parâmetros de entrada em um comando read e usa esses três parâmetros exclusivos posteriormente no script.

script cars.sh

#!/bin/bash
# Demonstrate how read actually works
echo What cars do you like?
read car1 car2 car3
echo Your first car was: $car1
echo Your second car was: $car2
echo Your third car was: $car3

Execução do terminal:

./cars.sh
What cars do you like?
Jaguar Maserati Bentley
Your first car was: Jaguar
Your second car was: Maserati
Your third car was: Bentley
./cars.sh
What cars do you like?
Jaguar Maserati Bentley Lotus
Your first car was: Jaguar
Your second car was: Maserati
Your third car was: Bentley Lotus
    
por Yaron 22.01.2018 / 14:20