BASH 脚本制作简单 Workflow - 更新 2014/6/17 12:00

因为需要,我创建了一个脚本叫 wf.sh (随意起什么名字),它可以读取当前目录下的 config.ini 配置文件来解析并执行工作流任务(Workflow)。

直接上代码:

config.ini

Workflow.Name = example
Workflow.Description = my work flow example \n and I know what's going on here.
#Workflow.StartJob = job1
Workflow.NextJobCounts = 1
Workflow.NextJob1.Name = job1

Job.job1.Command = echo "I am job1"; sleep 3;
Job.job1.NextJobCounts = 3
Job.job1.NextJob1.Name = job2
Job.job1.NextJob2.Name = job3
Job.job1.NextJob3.Name = job4

Job.job2.Command = echo "I am job2"; sleep 3;
Job.job2.NextJobCounts = 0

Job.job3.Command = echo "I am job3"; sleep 3;
Job.job3.NextJobCounts = 0

Job.job4.Command = echo "I am job4"; sleep 3;
Job.job4.NextJobCounts = 1
Job.job4.NextJob1.Name = job5

Job.job5.Command = echo "I am job5"; sleep 3;
Job.job5.NextJobCounts = 1
Job.job5.NextJob1.Name = job6

Job.job6.Command = echo "I am job6"; sleep 3;
Job.job6.NextJobCounts = 0

wf.sh

#!/bin/bash

CFGGet() {
  grep "^$1 = " config.ini | tail -1 | sed 's~^[^=]* = \(.*\)$~\1~g'
}

# Notify: make sure launch() is below library functions and dependencies.
launch() {
  local job="$1"
  local ret=0

  eval $(CFGGet Job.${job}.Command) || {
    ret=$?
    echo FAIL,$ret, command [$(CFGGet Job.${job}.Command)] is fail.
    exit $ret
  }

  local nextJobCounts=$(CFGGet Job.${job}.NextJobCounts)
  for ((i=1;i<=nextJobCounts;i++)); do
    eval launch $(CFGGet Job.${job}.NextJob${i}.Name) &
  done

  return 0
}

run() {
  local jobCounts=$(CFGGet Workflow.NextJobCounts)

  for ((i=1;i<=jobCounts;i++)); do
    launch $(CFGGet Workflow.NextJob${i}.Name) &
  done

  return 0
}

run

运行方式:

$ ./wf.sh

BASH 脚本制作简单 Workflow - 更新 2014/6/17 12:00,布布扣,bubuko.com

时间: 2024-10-29 03:59:39

BASH 脚本制作简单 Workflow - 更新 2014/6/17 12:00的相关文章

高级Bash脚本编程指南

http://tldp.org/LDP/abs/html/ 高级Bash脚本编程指南对脚本语言艺术的深入探索 本教程不承担以前的脚本或编程知识,但进展迅速走向一个中级/高级水平的指令...一直偷偷在细小的UNIX®智慧和学识.它作为一本教科书,一本手册,自学,并作为一个参考和知识的来源,壳牌的脚本技术.练习和大量的评论实例请读者参与,在这样的前提下,真正学习脚本的唯一途径是编写脚本.这本书是适合课堂使用的一般介绍编程的概念.本文件被授予公共领域.没有版权! 奉献对于安妮塔,所有魔术的来源内容表第

使用 FineUI 制作简单的购物车页面(源代码免费下载,另附 24 张专业版截图)

起因 最初是一位 FineUI 网友对购物车功能的需求,需要根据产品单价和数量来计算所有选中商品的总价. 这个逻辑最好在前台使用JavaScript实现,如果把这个逻辑移动到后台C#实现,则会导致过多的AJAX请求而影响用户体验. 最终效果 准备数据 在生成页面之前,我们需要准备购物车的数据,这里只是简单的用表格来模拟数据: 1 protected DataTable GetCartDataTable() 2 { 3 DataTable table = new DataTable(); 4 ta

写出健壮的Bash脚本

许多人用shell脚本完成一些简单任务,而且变成了他们生命的一部分.不幸的是,shell脚本在运行异常时会受到非常大的影响.在写脚本时将这类问题最小化是十分必要的.本文中我将介绍一些让bash脚本变得健壮的技术. 使用set -u  www.ahlinux.com 你因为没有对变量初始化而使脚本崩溃过多少次?对于我来说,很多次. chroot=$1 ... rm -rf $chroot/usr/share/doc 如果上面的代码你没有给参数就运行,你不会仅仅删除掉chroot中的文档,而是将系统

Unity3D NGUI自适应屏幕分辨率(2014/4/17更新)

原地址:http://blog.csdn.net/asd237241291/article/details/8126619 原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 本文链接地址:Unity3D NGUI自适应屏幕分辨率 1.UIRoot:根据高度自适应屏幕分辨率. NGUI根目录的UIRoot组件自带了根据高度自适应分辨率的功能. Scaling Style属性可选择三种不同的缩放策略. PixelPerfect 完美像素:直接显示设定好的像素.当屏幕高度低于minimum

2018-3-26Linux系统管理(14)bash脚本编程之循环控制语句

我们在上个章节中讲到了如何使用yum来实现所谓的程序包管理,对于yum而言,它只是rpm包的一个前段管理工具,并不是取代rpm后端管理工具,它只是提供了较好的.基于仓库的.完成元数据自动分析以及依赖关系自动分析及自动解决的这么一个工具,但是强依赖于yum仓库的存在,但是yum的工作架构为C/S架构,首先,对于需要安装某个程序软件来讲,我们就称之为客户端(yum client),而我们管理程序包所使用的命令为yum命令.而服务器端并不是yum服务器端,但我们可以称之为yum的仓库端(yum rep

Linux Bash脚本基本语法知识

写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正.如有不明白的地方,愿可一起探讨. 前提:读者能够基本使用一款文本编辑器以及了解文件的权限概念. 准备工作 在/home目录创建script文件用于保存所有的脚本程序: # mkdir /home/script # cd /home/script/ Bash脚本的基本输入输出 第一个bash脚本: # vim ./hello-world.sh 说明: "#!"是一个约定标记,它告诉系统这个脚本需要什么解释器来执行 作为可

从此编写 Bash 脚本不再难【转】

从此编写 Bash 脚本不再难 原创 Linux技术 2017-05-02 14:30 在这篇文章中,我们会介绍如何通过使用 bash-support vim 插件将 Vim 编辑器安装和配置 为一个编写 Bash 脚本的 IDE. -- Aaron Kili 本文导航 -什么是 bash-support.vim 插件? …… 05% -如何在 Linux 中安装 Bash-support 插件 …… 10% -如何在 Vim 编辑器中使用 Bash-support 插件 …… 17% -如何为

用Bash脚本将Linux普通用户添加为系统管理员

将Linux普通用户添加为系统管理员在Gnome或KDE这样强大与完善的桌面环境下是非常简单的事情,一般来说在用户设置的对话框里就直接有相应选项.不过,出于简洁与高效的风格,自己目前并未使用这些高端但吃内存的“重量级”桌面环境,使用的就是最基本的X视窗+Sawfish窗口管理器的组合.在这样的环境下进行用户管理,都是通过命令行来完成.如,使用useradd命令添加新用户.不过,由useradd命令添加的用户只具有普通使用者的权限,不具备系统管理的能力.这样一来,就给一些常见的操作带来不便,如,使

Linux应用环境实战10:Bash脚本编程语言中的美学与哲学(转)

阅读目录 一.一切皆是字符串 二.引用和元字符 三.字符串从哪里来.到哪里去 四.再加上一点点的定义,就可以推导出整个Bash脚本语言的语法了 五.输入输出重定向 六.Bash脚本语言的美学:大道至简 总结: 我承认,我再一次地当了标题党.但是不可否认,这一定是一篇精华随笔.在这一篇中,我将探讨Bash脚本语言中的美学与哲学. 这不是一篇Bash脚本编程的教程,但是却能让人更加深入地了解Bash脚本编程,更加快速地学习Bash脚本编程. 阅读这篇随笔,不需要你有Bash编程的经验,但一定要和我一