请教Linux shell下如何同时执行shell脚本命令多个脚本

在SHELL脚本中,如何设置让某个命令执行5次。-红联Linux系统门户
您的位置:
&& 查看内容 - - -
在SHELL脚本中,如何设置让某个命令执行5次。
还不算晕发布于
&&字号: &&&&(网友评论&3&条)&
在SHELL脚本中,如何设置让某个命令执行5次。或者6次,7次这样。
这个要怎么用,
#!/bin/bash
#查询是否有/etc/shadow,有则执行 echo
[ -f "/etc/shadow" ] && echo "This computer uses shadow passwors"
#我现在就是想要设定执行 sh /root/show.sh
这个命令的次数
sh /root/show.sh
希望哪位能结合这个例子给解说下,感激不尽!
发我邮箱也行
作者: chenjie815&发布日期:
for i in $(seq 1 ${times})
[indent][ -f "/etc/shadow" ] && echo "This computer uses shadow passwors"[/indent]
然后你调用show.sh脚本时,命令如下:
sh /root/show.sh 5
作者: rxotav&发布日期:
作者: 还不算晕&发布日期:
我今天网上找了个方法:
是这样一个例子:
#!/bin/bash
for ((a=1; a <= a++))
echo "Hello world!" $a
echo "The $a!"
执行了5次do
共有评论数 3/每页显示数 10
发表评论,与各位同人交流。回复请点击下方的我要评论按钮(游客可回复),要发表贴子请点击
Linux教程下载?“”(请点击),Linux教程免费下载。
求助Linux问题?论坛有39版块,覆盖所有Linux技术层面。前往“”
 |  |  |  |  |  |  |  |  |  |  |  | 
&2017 红联 Powered by SupSiteshell下同时读取多个文件的方法
作者:佚名
字体:[ ] 来源:互联网 时间:10-06 16:15:04
在shell脚本下,可以多种方式实现按行读取文件
1. 单个文件的读取
在shell脚本下,可以多种方式实现按行读取文件,如下:
for line in `cat ${input_filename}`
echo $line
while read line
echo $line
done & ${input_filename}
其中第二种方式是将文件重定向到标准输入中
2. 多个文件读取方法
那如何实现同时多个文件的读呢?我们可以继续利用bash中的文件重定向功能,将文件重定向到特定的文件描述符中,语法如下:
这里的n代表打开文件file的文件描述符,类似其他编程语言中的fd,如果没有指定n,则其默认行为如下:
#same as 0&file
#same as 1&file
#same as 0&&file
我们可以通过exec命令来打开所要重定向的文件:
exec <span style="COLOR: #&file1
exec <span style="COLOR: #&file2
然后我们可以通过read命令来读取对应文件的内容:
read data &&<span style="COLOR: # #使用符合是为了区分7是文件描述符,而不是文件名
read data &&<span style="COLOR: #
exec <span style="COLOR: #&/dev/null
exec <span style="COLOR: #&/dev/null
多文件读取示例代码如下:
readfiles() {
local FD1=7
local FD2=8
local file1=$1
local file2=$2
local count1=0
local count2=0
local eof1=0
local eof2=0
local data1
local data2
# Open files.
exec <span style="COLOR: #&$file1
exec <span style="COLOR: #&$file2
while [[ $eof1 -eq 0
$eof2 -eq 0 ]]
if read data1&&$FD1; then
let count1++
printf &%s, line %d: %s\n& $file1 $count1 &$data1&
if read data2 &&$FD2; then
let count2++
printf &%s, line %d: %s\n& $file2 $count2 &$data2&
#read file1 and file2
readfiles file1 file2
大家感兴趣的内容
12345678910
最近更新的内容Linux Shell实现模拟多进程并发执行 - msnshow的个人空间 - 51Testing软件测试网 51Testing软件测试网-中国软件测试人的精神家园
有正在从事web测试和APP测试工作或想从事此行业的测友们,欢迎与我联系,相互交流!测试交流微信公众号:gh_03e570cb5168
长期招聘不同级别测试工程师(WEB\APP\性能)有意者请与本人联系!
Linux Shell实现模拟多进程并发执行
& 13:45:20
/ 个人分类:
在bash中,使用后台任务来实现任务的“多进程化”。在不加控制的模式下,不管有多少任务,全部都后台执行。也就是说,在这种情况下,有多少任务就有多少“进程”在同时执行。我们就先实现第一种情况:实例一:正常情况脚本———————————————————————————–#!/bin/bashfor&((i=0;i&5;i++));do&{&sleep&1;echo&1&&aa&&&&echo&”done!”&}donecat&aa|wc&-lrm&aa———————————————————————————–这种情况下,程序顺序执行,每个循环3s,共需15s左右。$&time&bash&test.shdone!done!done!done!done!5real&&&&0m15.030suser&&&&0m0.002ssys&&&&&0m0.003s实例二:“多进程”实现———————————————————————————–#!/bin/bashfor&((i=0;i&5;i++));do&{&sleep&3;echo&1&&aa&&&&echo&”done!”&}&&donewaitcat&aa|wc&-lrm&aa———————————————————————————–这个实例实际上就在上面基础上多加了一个后台执行&符号,此时应该是5个循环任务并发执行,最后需要3s左右时间。$&time&bash&test.shdone!done!done!done!done!5real&&&&0m3.011suser&&&&0m0.002ssys&&&&&0m0.004s效果非常明显。这里需要说明一下wait的左右。wait是等待前面的后台任务全部完成才往下执行,否则程序本身是不会等待的,这样对后面依赖前面任务结果的命令来说就可能出错。例如上面wc -l的命令就报错:不存在aa这个文件。以上所讲的实例都是进程数目不可控制的情况,下面描述如何准确控制并发的进程数目。——————————————————————————————————————#!/bin/bash#&,&by&wwy#———————————————————————————–#&此例子说明了一种用wait、read命令模拟多线程的一种技巧#&此技巧往往用于多主机检查,比如ssh登录、ping等等这种单进程比较慢而不耗费cpu的情况#&还说明了多线程的控制#———————————————————————————–function&a_sub&{&#&此处定义一个函数,作为一个线程(子进程)sleep&3&#&线程的作用是sleep&3s}tmp_fifofile=”/tmp/$.fifo”mkfifo&$tmp_fifofile&&&&&&#&新建一个fifo类型的文件exec&6&&$tmp_fifofile&&&&&&#&将fd6指向fifo类型rm&$tmp_fifofilethread=15&#&此处定义线程数for&((i=0;i&$i++));doechodone&&&6&#&事实上就是在fd6中放置了$thread个回车符for&((i=0;i&50;i++));do&#&50次循环,可以理解为50个主机,或read&-u6#&一个read&-u6命令执行一次,就从fd6中减去一个回车符,然后向下执行,#&fd6中没有回车符的时候,就停在这了,从而实现了线程数量控制{&#&此处子进程开始执行,被放到后台&a_sub&&&&{&#&此处可以用来判断子进程的逻辑&echo&”a_sub&is&finished”&}&||&{&echo&”sub&error”&}&echo&&&6&#&当进程结束以后,再向fd6中加上一个回车符,即补上了read&-u6减去的那个}&&donewait&#&等待所有的后台子进程结束exec&6&&-&#&关闭df6exit&0——————————————————————————————————————sleep 3s,线程数为15,一共循环50次,所以,此脚本一共的执行时间大约为12秒即:15×3=45, 所以 3 x 3s = 9s(50-45=5)&15, 所以 1 x 3s = 3s所以 9s + 3s = 12s$ time ./multithread.sh &/dev/nullreal&&&&&&& 0m12.025suser&&&&&&& 0m0.020ssys&&&&&&&& 0m0.064s而当不使用多线程技巧的时候,执行时间为:50 x 3s = 150s。此程序中的命令 mkfifo&tmpfile和linux中的命令 mknod&tmpfile&p效果相同。区别是mkfifo为POSIX标准,因此推荐使用它。该命令创建了一个先入先出的管道文件,并为其分配文件标志符6。管道文件是进程之间通信的一种方式,注意这一句很重要exec&6&&$tmp_fifofile&&&&&&#&将fd6指向fifo类型如果没有这句,在向文件$tmp_fifofile或者&6写入数据时,程序会被阻塞,直到有read读出了管道文件中的数据为止。而执行了上面这一句后就可以在程序运行期间不断向fifo类型的文件写入数据而不会阻塞,并且数据会被保存下来以供read程序读出linux下使用shell脚本打开多个terminal并在其中运行程序
&&& 昨天看到同事又要整理每个服务器上的程序启动脚本,几十台服务器,每台机器要启动n个程序,确实比较费劲,还容易出错。就抱着学习一下的态度(主要是我比较懒),看看咋能简便一些!&&& 想写一个shell脚本完成这个工作,这样每次就不用在一台服务器上手工启动多个程序了,以后维护这个脚本就行了。上网找了一些资料,好多都不是解决我的问题,综合了几种方案,自己弄出来了一个脚本,以前很少接触linux系统,也算是学习一下,记录一下吧!省得以后忘记了!也方便一下有同样需求的人!脚本如下:gnome-terminal -t &cacheserver& -x bash -c &cd /public/mudb/bin/nutch -core cacheserver 8888;&-t 为打开终端的标题,便于区分。-x 后面的为要在打开的终端中执行的脚本,根据需要自己修改就行了。最后的是让打开的终端在执行完脚本后不关闭。&&& 现在想把这个启动shell脚本放到系统开机启动脚本里,这样就更符合懒人的习惯了,哈哈!
&&最后修改于
请各位遵纪守法并注意语言文明在shell脚本中调用另一个脚本的三种不同方法
/directory/script.sh)
fork是最普通的,
就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本.
运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候,
parent-shell还在。
sub-shell执行完毕后返回parent-shell.
sub-shell从parent-shell继承环境变量.但是sub-shell中的环境变量不会带回parent-shell
exec (exec
/directory/script.sh)
exec与fork不同,不需要新开一个sub-shell来执行被调用的脚本.&
被调用的脚本与父脚本在同一个shell内执行。但是使用exec调用一个新脚本以后,
父脚本中exec行之后的内容就不会再执行了。这是exec和source的区别
source (source
/directory/script.sh)
与fork的区别是不新开一个sub-shell来执行被调用的脚本,而是在同一个shell中执行.
所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中得到和使用.
可以通过下面这两个脚本来体会三种调用方式的不同:
#!/bin/bash
echo "PID for 1.sh before exec/source/fork:$$"
echo "1.sh: \$A is $A"
case $1 in
&& & echo "using
exec ./2.;
&&&source)
&& & echo "using
&& & echo "using
fork by default…"
echo "PID for 1.sh after exec/source/fork:$$"
echo "1.sh: \$A is $A"
#!/bin/bash
echo "PID for 2.sh: $$"
echo "2.sh get \$A=$A from 1.sh"
echo "2.sh: \$A is $A"
执行情况:
./1.sh&&&&
PID for 1.sh before exec/source/fork:5845364
1.sh: $A is B
using fork by default…
PID for 2.sh: 5242940
2.sh get $A=B from 1.sh
2.sh: $A is C
PID for 1.sh after exec/source/fork:5845364
1.sh: $A is B
$ ./1.sh exec
PID for 1.sh before exec/source/fork:5562668
1.sh: $A is B
using exec…
PID for 2.sh: 5562668
2.sh get $A=B from 1.sh
2.sh: $A is C
$ ./1.sh source
PID for 1.sh before exec/source/fork:5156894
1.sh: $A is B
using source…
PID for 2.sh: 5156894
2.sh get $A=B from 1.sh
2.sh: $A is C
PID for 1.sh after exec/source/fork:5156894
1.sh: $A is C
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 执行shell脚本命令 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信