每次执行bash脚本时执行不同的任务

时间:2017-10-26 16:02:03

标签: linux bash

假设我有两项任务。 当我们第二次运行脚本时,是否可以编写应该​​执行第一个任务的bash脚本(一个脚本),第二次运行脚本时再执行第二个任务,当我们第四次运行时运行第三个和第二个脚本时,是否可以执行第一个任务?

3 个答案:

答案 0 :(得分:1)

是的,通过记住/保持最后一次运行的内容,很容易做到这一点。

$ echo "1" > current_counter
$ cat current_counter 
1
$ vim main.bash
$ cat main.bash 
#/bin/bash
current_counter=$(<"current_counter")
if [[ "$((${current_counter}%2))" -eq 1 ]]; then
    echo "Running task 1"
else
    echo "Running task 2"
fi
echo "$((${current_counter}+1))" > "current_counter"
$ bash main.bash 
Running task 1
$ cat current_counter 
2
$ bash main.bash 
Running task 2
$ cat current_counter 
3
$ bash main.bash 
Running task 1
$ cat current_counter 
4
$ bash main.bash 
Running task 2
$ cat current_counter 
5
$ 

您还可以在current_counter文件中使用布尔值0或1,或者仅通过检查文件的存在,但它仅适用于此情况。如果你有更多的任务(不仅仅是2),如3或甚至100,那么上面的脚本很容易扩展;那么你只需要改变模数并添加更多条件来处理每个残留物。

答案 1 :(得分:0)

我发现ritesht93脚本太难读了,所以我自己做了。

Bash版本

运行脚本会提供以下输出:

{ ~ }  » ./test.sh                                                                                                                                       ~
First Run
{ ~ }  » ./test.sh                                                                                                                                       ~
Second Run
{ ~ }  » ./test.sh                                                                                                                                       ~
Third Run
{ ~ }  »    

首先我们创建一个数字为1的文件:

{ ~ }  » echo 1 > counter

脚本内容(test.sh):

#!/usr/bin/bash

foo=`cat counter`

if [ $foo -eq '1' ]
        then
                echo "First Run"
                echo '2' > counter
fi

if [ $foo -eq 2 ]
        then
                echo "Second Run"
                echo '3' > counter
fi

if [ $foo -eq 3 ]
        then
                echo "Third Run"
                # after 3 times we reset
                echo '1' > counter
fi

Python 3.0版本(如果需要)

我也有时间在python中做到这一点:

首先我们创建一个数字为1的文件:

{ ~ }  » echo 1 > counter

脚本内容:

 #!/usr/bin/python

with open('counter','r+') as file :
    for l in file :
            #print(type(l))
            line = l.strip()

            if line == '1' :
                    print ('this is line 1')
                    file.seek(0)
                    file.truncate()
                    file.write('2')
            elif line == '2' :
                    print ('this is line 2')
                    file.seek(0)
                    file.truncate()
                    file.write('3')
            elif line == '3' :
                    print ('this is line 3')
                    file.seek(0)
                    file.truncate()
                    file.write('1')
            else :
                    print ("I'm lost, reset the counter")

答案 2 :(得分:0)

这比之前的两个答案更容易。只需创建一个空的控制文件。例如Touch control并以rm control删除。

当你运行它时,你检查它是否存在,是否它会将其销毁并运行第二个任务,如果不运行第一个任务并创建它。

你不需要检查文件里面的任何内容。

修改

#!/bin/bash
$FILE=filename
if [-f $FILE] 
then
#Task1
rm $FILE
else
#Task2
touch $FILE
fi

您可以使用不同的名称作为下一个脚本添加更多任务:

#!/bin/bash
$FILE1=filename1
$FILE2=filename2

if [-f $FILE1] 
then
#Task1
mv $FILE1  $FILE2
elif [-f $FILE2]
then
#Task2
rm $FILE2
else 
#Task3
touch %FILE1
fi

无论如何,我认为使用超过2个任务并不是一个好主意。