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

How to open new terminal and run script and sent the option

我有两个脚本,"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

我不确定我是否理解您的需求或您的脚本是否正常工作,但是如果您在脚本的开头有一个您在某些情况下试图跳过的菜单,只需添加一个命令-行参数。由于您的脚本不接受任何命令行参数,因此您可以测试是否存在单个特定参数并采取相应措施。

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

if [ "" = "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 脚本中制作菜单的好方法。

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

将菜单放入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"

中所述,您最好只检查 ping 的退出状态,而不是查找特定的错误消息;有多个错误(网络无法访问,没有到主机的路由等)可能导致它失败,但所有这些错误都会导致 ping.

的非零退出代码

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

PATH=$HOME/bin:$PATH

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

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

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

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

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