多个sh脚本怎么用一个sh脚本执行?

背景知识

在Shell脚本中调用另一个脚本的三种方式:

  • source 指定脚本中的命令在同一个shell中运行。(默认shell中的命令都是创建sub-shell,然后执行。执行完后,返回父shell)
  • fork 就是创建sub-shell运行脚本中的命令,和默认运行方式相同。
  • exec 和source相似,区别就是,运行完毕命令后退出,不会返回父shell
     

inux 下shell脚本执行多个命令 

1.每个命令之间用;隔开
说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,但不保证每个命令都执行成功。
2.每个命令之间用&&隔开
说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。
3.每个命令之间用||隔开
说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功一条命令为止

多个同名的sh脚本怎么用一个sh脚本执行?

问题背景描述:

比如A目录下有好几个子文件
A:/a
A:/b
A:/c
A:/d
每个文件夹都有个同名的down.sh,我想同时运行这个down.sh ,如何弄?

如果一个个进到对应目录执行也是OK的,但是比较麻烦。就想汇总1个SH来执行多个sh脚本比较省事。

下面这个网友的一行命令非常好,但是我那多个sh脚本里面,有的是相对路径,有的是绝对路径,执行会报错文件不存在之类的(文件不是我写的,我也懒得去改了)

find . -iname down.sh -exec \{\} \;

参考了另外的答复,写了1个sh脚本,测试了下,没发现啥问题

for 变量 in 父目录/*                         遍历父目录里面的全部子目录

#!/bin/bash
for folder in /tools/apps/*
do
# 这里的-d 参数判断$folder是否存在,-f 参数判断 $file 是否存在
if [ -d $folder ] && [ -f $folder/down.sh ]; then
     cd $folder && chmod +x $folder/down.sh &&  $folder/down.sh && echo "$folder ok"
fi
done

 

怎么用1个shell杀掉多个指定的端口呢

问题描述:目录里面部署了多个服务。每个服务的端口是分配的固定的。一个个的杀好麻烦,一个shell自动杀岂不更好

for 变量 in $数组[*]               遍历数组里的端口号    

#!/bin/bash
#"down_all.sh"杀掉shell脚本所在目录里面指定端口的进程
a=(7002 7003 7004 7005 7007 7008 70097)
for port in ${a[*]}; do
#echo $i
#把命令提取到的进程id赋值给变量id。语法是:反单引号把命令括起来,赋值给变量
id=`lsof -i:$port |grep -i 'LISTEN'| awk '{print $2}'`
kill -9 $id && echo "kill $port success" 
done

怎么用1个shell查看多个指定端口的状态呢?

#!/bin/bash
#"p_all.sh" 查看指定端口的状态
a=(6002 6003 6004 6005 6007 6008 6009 )
for port in ${a[*]}; do
#echo $i
id=`lsof -i:$port |grep -i 'LISTEN'`
echo $id
done

 

你可能感兴趣的:(linux)