如何打开新终端并运行脚本并发送选项

时间:2015-02-16 03:04:16

标签: linux bash terminal gnome

我有两个脚本," main.sh"将打开一个新终端并执行第二个脚本" test.sh"。

有没有方法,如果我运行main.sh它将运行test.sh,但我不希望用户按任何项目,我希望它将跳过按项目,然后跳转到按IP地址。我希望我的项目设置为1,这是ping ip。

main.sh

gnome-terminal -x ./test.sh

test.sh:

echo "1. ping ip "

echo "2. shut down  "
echo "3. reboot           
echo -n"item:"
read $item
echo -n "Please enter ip address 192.168."

read ipaddress
echo "your ip address is:" $ipaddress


if [ "$status" == "1" ]; then

ip="192.168.0.$ipaddress"
ping -c 1 $ip >"pinglog"

ping_ok=`cat "pinglog"| grep Unreachable`

if [ "$ping_ok" == "" ]; then

echo "BMC ip" $ip "==>ping PASS"
else echo "fail"

else if [ "$status" == "2" ]; then

init 0

else if [ "$status" == "3" ]; then

init 6
else


echo "q" 

break

fi

2 个答案:

答案 0 :(得分:2)

我不完全确定我理解你想要什么,或者你的脚本是否正常工作,但如果你在脚本的开头有一个菜单,你在某些情况下试图跳过,只需添加命令行参数。由于您的脚本不会按原样使用任何命令行参数,因此您可以测试是否存在单个特定参数并采取相应措施。

例如,要测试是否存在"skipmenu"字符串作为第一个参数,您可以在脚本的开头执行以下操作:

if [ "$1" = "skipmenu"]; then
    # menu must be skipped - set up your variables accordingly here
else
    # regular menu
fi

# rest of your code here

./test.sh执行它会照常显示您的菜单,但以./test.sh skipmenu执行它会跳过它。这样你就可以gnome-terminal -x ./test.sh skipmenu

此外,select语句是在shell脚本中创建菜单的好方法。

答案 1 :(得分:1)

正确的解决方案是将其模块化为单独的脚本。

将菜单放在menu.sh

#!/bin/sh
while true; do
    cat <<'____HERE'
      1. ping ip
      2. shut down
      3. reboot
____HERE

    read -p "item:" item   # no dollar sign on the variable you read!
    case $item in 
        1) exec bmcping;;
        2) init 0;;
        3) init 6;;
        q) break;;
    esac
done

(正如其他地方所述,使用select可以更优雅地完成此操作,但它或多或少会相同的代码。)

然后将ping功能放入单独的脚本中 - 我在上面的菜单中调用了此bmcping

#!/bin/sh
read -p "Please enter ip address 192.168.0." octet
ip="192.168.0.$octet"
ping -c 1 "$ip" | grep Unreachable &&
  echo "BMC ip" $ip "==>ping PASS" || echo "fail"

previous answer of mine中所述,您最好只检查ping的退出状态,而不是为特定的错误消息进行点击;有多个错误(网络不可达,没有到主机的路由等)可能导致它失败,但所有这些错误都会导致ping的非零退出代码。

如果您将此保存在/home/you/bin/bmcping中并且已经/home/you/bin中没有PATH,请在.bashrc或类似内容中添加以下内容:

PATH=$HOME/bin:$PATH

更改将在您启动新shell时生效,或者在Bash提示符下执行. ~/.bashrc

现在,您可以从bmcping脚本中调用gnome-terminal或在循环中运行它,例如

for ((i=1; i<=20; ++i)); do
    echo "$i" | bmcping
done

顺便提一下,这也说明了如何将输入提供给当前脚本,因此只需进行少量更改,您就可以将当前菜单提供给&#34; 1&#34;和IP地址;但假设您希望脚本以交互方式读取IP地址,这会变得相当笨拙和笨拙。但是,一个更好的设计就是接受一个I​​P地址作为命令行参数,而不是需要交互式输入。

(我私下想知道你为什么要在一个单独的gnome-terminal中运行每一个;更好的方法是启动一些后台进程,并将它们的输出收集到一个日志文件中。)