我有两个脚本," 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
答案 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地址,这会变得相当笨拙和笨拙。但是,一个更好的设计就是接受一个IP地址作为命令行参数,而不是需要交互式输入。
(我私下想知道你为什么要在一个单独的gnome-terminal
中运行每一个;更好的方法是启动一些后台进程,并将它们的输出收集到一个日志文件中。)