首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash交互脚本

Bash交互脚本
EN

Ask Ubuntu用户
提问于 2018-01-22 12:21:46
回答 2查看 4.7K关注 0票数 3

是否可以在第一个提示符中提供多个要执行的变量?在开始提示时,我想提供最多5个变量,这些变量在一个会话中执行特定的脚本。

例如:

代码语言:javascript
复制
echo -n "Enter the script you want to launch and press [ENTER]
read script

而不是$script,我想有一些选择,比如阅读script1或script2 .直到script5,它允许我在任何组合(例如1和2、1和3、5等)下用这个单一条目执行任意数量的脚本#。

代码语言:javascript
复制
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
EN

回答 2

Ask Ubuntu用户

回答已采纳

发布于 2018-01-22 17:24:21

根据@steeldriver留下的评论,我为你拼凑了一个。这只是一个命令行脚本,允许在命令行上进行多个输入。它将getopts用于多个选项,并添加nohup command &以将脚本移动到后台,以便下一种情况能够运行。

要获得更多帮助,请在互联网上搜索bash getopts。有那么多东西需要学习,你可以制作出令人难以置信的脚本来做你想做的任何事情。

The脚本:

代码语言:javascript
复制
#!/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

现在,如果您在运行脚本时没有使用“后”或“-h”作为帮助,则会出现以下内容。我把我的脚本askhelp.bsh命名为一个例子。

代码语言:javascript
复制
~$ ./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

然后,在我的测试脚本中,我制作了它,这样它就可以回显这些行,以显示它们正在运行。

示例:

代码语言:javascript
复制
~$ ./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

另一个例子是:

代码语言:javascript
复制
~$ ./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

请求中的New脚本:

这个脚本应该为每个用于跟踪的选择打开一个新的gnome-terminal。这些命令是为gnome-terminal完成的。如果您决定使用不同的终端,请确保在每个case语句中对命令进行适当的更改。

代码语言:javascript
复制
#!/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

希望这能有所帮助!

票数 1
EN

Ask Ubuntu用户

发布于 2018-01-22 13:20:09

您可以使用bash read命令从用户获得多个参数。

下面的示例取自巴什输入教程

下面的脚本在一个read命令中读取3个输入参数,并在脚本后面使用这3个唯一的参数。

cars.sh脚本

代码语言:javascript
复制
#!/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

Terminal执行:

代码语言:javascript
复制
./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
票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/998640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档