sh/bash/dash/ksh/zsh等Shell脚本
-
BigSnake.NET
- 帖子: 12522
- 注册时间: 2006-07-02 11:16
- 来自: 廣州
-
联系:
#31
帖子
由 BigSnake.NET » 2008-05-26 21:24
kinzess 写了:ok
用2个脚本实现了这个功能- -
你要求的应该是这个功能把?
#! /bin/bash
for i in 1 2 3 4 5 6 7 8 9
do
echo "欢迎访问forum.ubuntu.org"
top
done
#! /bin/bash
#存为test01.sh,先运行这个命令为test01.sh&
for i in 1 2 3 4 5 6 7 8 9
do
sleep 5
killall top
done
不需要两个
代码: 全选
for i in 1 2 3
do
( sleep 3 && pkill top) &
echo $i
top
done
^_^ ~~~
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
-
BigSnake.NET
- 帖子: 12522
- 注册时间: 2006-07-02 11:16
- 来自: 廣州
-
联系:
#32
帖子
由 BigSnake.NET » 2008-05-26 21:26
kinzess 写了:BigSnake.NET 写了:代码: 全选
$ cat a.sh
for i in 1 2 3
do
top &
echo top
sleep 1
killall top
done
Exit status: 0
autumncat@autumncat-host:~
$ bash ./a.sh
top
top: failed tty get
top: failed tty get
top
top
top: failed tty get
Exit status: 0
循环是不会打断的, top需要tty是另一回事. 楼主说循环退出很难理解, kill 掉 top 是不可能把 上层的 shell 也 kill 的
弱弱地问下
top: failed tty get
这个是什么原因导致的?
我刚才也想到了这个方法。。
也出现了
top: failed tty get
然后查了一下不知道什么原因就放弃这个方法了- -
top 因为是交互式程序, 需要一个终端来显示, 不能脱离终端后台运行(另一个例子是 mplayer)
^_^ ~~~
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
-
kinzess
- 帖子: 319
- 注册时间: 2007-04-11 10:39
#33
帖子
由 kinzess » 2008-05-26 21:30
学到了
谢谢BigSnake.NET
顺便问下
( sleep 3 && pkill top) &
其中有哪些空格是必须的??
上次由
kinzess 在 2008-05-26 21:31,总共编辑 1 次。
-
paulcross
- 帖子: 484
- 注册时间: 2006-07-23 20:27
#34
帖子
由 paulcross » 2008-05-26 21:30
呵呵 其实这个问题之所以 不好理解就是因为没有合适的例子
top是不怎么合适 但是我又不知道别的可以持续执行的命令
锐捷的认证机制是一直和服务端交流数据的 所以是持续执行的
为什么杀掉它它会退出循环呢 我也不怎么清楚
反正杀了后 它就是输出一句
connection terminated !
然后就
paul@paul-desktop$ 了
锐捷没有连上的时候是不会出现这句话的 也不会跳出循环
可能就是因为这句话的关系
-
BigSnake.NET
- 帖子: 12522
- 注册时间: 2006-07-02 11:16
- 来自: 廣州
-
联系:
#35
帖子
由 BigSnake.NET » 2008-05-26 21:32
paulcross 写了:呵呵 其实这个问题之所以 不好理解就是因为没有合适的例子
top是不怎么合适 但是我又不知道别的可以持续执行的命令
锐捷的认证机制是一直和服务端交流数据的 所以是持续执行的
为什么杀掉它它会退出循环呢 我也不怎么清楚
反正杀了后 它就是输出一句
connection terminated !
然后就
paul@paul-desktop$ 了
锐捷没有连上的时候是不会出现这句话的 也不会跳出循环
可能就是因为这句话的关系
你是放到单独脚本里运行的吗?
将脚本的详细代码和你运行的步骤说说
^_^ ~~~
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
-
BigSnake.NET
- 帖子: 12522
- 注册时间: 2006-07-02 11:16
- 来自: 廣州
-
联系:
#36
帖子
由 BigSnake.NET » 2008-05-26 21:33
kinzess 写了:学到了
谢谢BigSnake.NET
顺便问下
( sleep 3 && pkill top) &
其中有哪些空格是必须的??
不知道, 自己试试吧
^_^ ~~~
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
-
BigSnake.NET
- 帖子: 12522
- 注册时间: 2006-07-02 11:16
- 来自: 廣州
-
联系:
#37
帖子
由 BigSnake.NET » 2008-05-26 21:34
"持续执行" 倒是没什么, 基本上所有程序都可以当做"持续执行", 只要没有阻塞 TERM 信号, kill 都会将其杀死
^_^ ~~~
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
-
kinzess
- 帖子: 319
- 注册时间: 2007-04-11 10:39
#38
帖子
由 kinzess » 2008-05-26 21:34
BigSnake.NET 写了:kinzess 写了:学到了
谢谢BigSnake.NET
顺便问下
( sleep 3 && pkill top) &
其中有哪些空格是必须的??
不知道, 自己试试吧
我就是不知道
之前写就是因为空格的问题害我调试了很久。。郁闷
有些地方要空格,有些又不需要
有时候加了和不加问题很大
偏偏又看不出来
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#39
帖子
由 eexpress » 2008-05-26 22:12
BigSnake.NET 写了:eexpress 写了:有wait命令的啊。定时查看输出的。
不太明确你搞什么。
wait 是等待子进程...
我不爱看别人的实际的脚本,以为是需要交互操作。
wait + expect + sleep 是一个完整的交互应答环境了啊。可以根据提示,自动回答。
● 鸣学
-
kinzess
- 帖子: 319
- 注册时间: 2007-04-11 10:39
#40
帖子
由 kinzess » 2008-05-26 22:16
paulcross 写了:呵呵 其实这个问题之所以 不好理解就是因为没有合适的例子
top是不怎么合适 但是我又不知道别的可以持续执行的命令
锐捷的认证机制是一直和服务端交流数据的 所以是持续执行的
为什么杀掉它它会退出循环呢 我也不怎么清楚
反正杀了后 它就是输出一句
connection terminated !
然后就
paul@paul-desktop$ 了
锐捷没有连上的时候是不会出现这句话的 也不会跳出循环
可能就是因为这句话的关系
既然它无论怎么样都会退出循环。。。
那么。。。把启动命令写在脚本1里
另外一个脚本2就写循环启动脚本1。。
这样脚本2就不会退出了把?
再退出我就真的是没招了
-
paulcross
- 帖子: 484
- 注册时间: 2006-07-23 20:27
#41
帖子
由 paulcross » 2008-05-26 22:32
gedit
这个命令就是非持续执行的
top
这个命令就是持续执行的
#!/bin/sh
while :
do
superstar -i eth0 -u 用户名 -p 密码
sleep 240
echo "eeeee"
killall superstar &
echo "ffffff"
done
这就是完整代码了
每次到killall superstar 的时候就跳出循环
-
yingfei
- 帖子: 273
- 注册时间: 2007-09-03 18:34
- 来自: 羊城通
#42
帖子
由 yingfei » 2008-05-27 11:18
楼上的,在 superstar -i eth0 -u 用户名 -p 密码 后边加个 & 不行么?
superstar -i eth0 -u 用户名 -p 密码 &
如果这样 superstar 变成了 暂停状态, 那么 用 bg 让它继续运行。
代码: 全选
superstar -i eth0 -u 用户名 -p 密码 &
bg
sleep 240
echo "eeeee"
kill $(pidof superstar)
echo "ffffff"
-
BigSnake.NET
- 帖子: 12522
- 注册时间: 2006-07-02 11:16
- 来自: 廣州
-
联系:
#43
帖子
由 BigSnake.NET » 2008-05-27 12:00
paulcross 写了:gedit
这个命令就是非持续执行的
top
这个命令就是持续执行的
#!/bin/sh
while :
do
superstar -i eth0 -u 用户名 -p 密码
sleep 240
echo "eeeee"
killall superstar &
echo "ffffff"
done
这就是完整代码了
每次到killall superstar 的时候就跳出循环
这是不可能的,
superstar -i eth0 -u 用户名 -p 密码 压根没返回, 下面的语句不会执行..
贴一下输出吧..
PS : 完全无法理解 LZ 所谓的 "持续运行" 概念
^_^ ~~~
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
-
paulcross
- 帖子: 484
- 注册时间: 2006-07-23 20:27
#44
帖子
由 paulcross » 2008-05-27 12:32
你首先把superstar 拷贝到/bin 里面 设定为可执行 否则这个东西当然没输出了
另外你的用户名 密码都要输入正确否则就没办法连接的
其实你们要我帖我自己的这个脚本 都没有意义的 这个脚本只有你们也是用锐捷上网的情况下才能测试
top命令和 ls 命令的区别 是什么 就是持续执行和一次性执行的区别
-
冲浪板
- 论坛版主
- 帖子: 7513
- 注册时间: 2007-05-06 8:19
#45
帖子
由 冲浪板 » 2008-05-27 12:34
watch怎么样