shell脚本 循环遍历指定文件夹,执行指定文件

#!/bin/sh
function ergodic(){
    for fileName  in ` ls $1 `
    do
        if [ -d $1"/"$fileName  ]
        then
             ergodic $1"/"$fileName 
        else
          # echo $fileName
        	if [[ ${fileName} == 'start-service.sh' ]]; 
        	 then
		# echo `pwd`/$fileName
		echo  $1/$fileName
                 sh $1/start-service.sh start $1 &
   	        fi
        fi
    done
}
INIT_PATH="/data/saleserver/startup"
ergodic $INIT_PATH 
  • 解释:
    • 1 第一行是一个常规的格式,我们要指定这个脚本是由sh来执行
      2 第二行是一个脚本的函数
      3 第三行是一个for循环,shell里面把反引号里面的命令认为是系统命令,那么代码的意思就是循环枚举这个目录下的文件,$1是指函数的第一个参数  # 是键盘上'~'下面的符号,不是单引号
      4 第四行跳过,相信大家都懂
      5 第五行是一个判断语句,如果当前文件是一个目录  # 两端要有空格,不然报错
      6 if的结构then
      7 递归执行这个函数,传入当前目录
      8 如果文件不是目录,那么我们执行下一行
      9 if [[ ${fileName} == 'start-service.sh' ]];  这个命令是判断当前文件是不是要执行的文件
      10 then
      11 打印
      12 执行start-service.sh脚本
      13 if结束
      14 结束
      
      记得脚本改成可以执行的.  在用./启动就OK了.
      
      //todo
      如果是windows环境写的.然后上传到linux系统里执行的,文件的格式为dos格式。而linux只能执行格式为unix格式的脚本。会给你报错:bad interpreter: No such file or directory
      
      解决办法一:
      1.vi编辑器来查看文件的format vi 文件名
      2.  :set ff 查看当前文件的格式
      3.  :set ff=unix 
      4.  在使用:set ff 命令查看当前格式 如果是unix  就直接:wq退出 就OK了.
      
      解决办法二: dos2unix命令修改
      dos2unix 文件名 即可 例: dos2unix start.sh   
      然后直接./运行就行了

       

你可能感兴趣的:(运维,WebMagic)