如何使用shell脚本原子替换函数

时间:2016-05-23 09:00:35

标签: bash shell

首先:在我的shell脚本中:

[root@localhost ~]# cat  calc.sh 
#! /bin/sh
calc_func()
{

    i=1;
    j=2;
    if [ $i -gt 0 ];then
        return $(($i+$j));
    fi
}   
calc_func  
echo $?

然后,在我的文字中:

[root@localhost ~]# cat calc.txt 
sub_func()
{  

    i=100;
    j=200;
    if [ $i -gt 0 ];then
        return $(($i-$j));
    fi

}

现在,我想将calc.sh中名为calc_func的函数体替换为calc.txt中的sub_func体;让它成为这个:

[root@localhost ~]# cat  calc.sh 
#! /bin/sh
calc_func()
{

    i=100;
    j=200;
    if [ $i -gt 0 ];then
        return $(($i-$j));
    fi

}   
calc_func  
echo $?

我想用shell脚本实现它,我该如何解决?提示:源或出口无法使用。

1 个答案:

答案 0 :(得分:1)

您可以使用headtailsedmv轻松完成此操作。例如:

head -n 2 calc.sh >tmp.sh
sed -n '/{/,/}/p' calc.txt >> tmp.sh
tail -n2 calc.sh >> tmp.sh
mv calc.sh calc.sh.sav; mv tmp.sh calc.sh

您可以将其作为单行或短脚本。

您的原始calc.sh现在位于calc.sh.sav,而来自calc.sh的内部区块的新calc.txt位于calc.sh,例如

$ cat calc.sh
#! /bin/sh
calc_func()
{

    i=100;
    j=200;
    if [ $i -gt 0 ];then
        return $(($i-$j));
    fi

}
calc_func
echo $?