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

Linux 每次执行bash脚本时执行不同的任务,linux,bash,Linux,Bash,假设我有两个任务。 是否可以编写一个bash脚本一个脚本,当我们运行第一次时,它应该执行第一个任务;当我们运行第二次脚本时,它应该执行第二个任务;当我们运行第三次脚本时,它应该执行第一个任务;当我们运行第四次脚本时,它应该执行第二个任务?是的,通过记住/保持上次运行的内容,它很容易做到这一点 $ echo "1" > current_counter $ cat current_counter 1 $ vim main.bash $ cat main.bash #/bin/bash cu

假设我有两个任务。
是否可以编写一个bash脚本一个脚本,当我们运行第一次时,它应该执行第一个任务;当我们运行第二次脚本时,它应该执行第二个任务;当我们运行第三次脚本时,它应该执行第一个任务;当我们运行第四次脚本时,它应该执行第二个任务?

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

$ 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
$ 

您也可以在当前_计数器文件中使用布尔值0或1,或者仅通过检查文件是否存在,但它仅适用于这种情况。如果你有更多的任务,而不仅仅是2个,比如3个,甚至100个,上面的脚本就可以轻松伸缩;然后你只需要改变模数,并添加更多的条件来处理每个余数。

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

Bash版本

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

首先,我们创建一个编号为1的文件:

脚本content test.sh:

Python 3.0版本(如果需要)

我也有时间用python来做:

首先,我们创建一个编号为1的文件:

脚本内容:

 #!/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")

这比前面的两个答案更简单。只需创建一个空的控制文件。例如,使用rm control触摸控制和删除

运行它时,检查它是否存在,如果存在,则销毁它并运行第二个任务,如果不存在,则运行第一个任务并创建它

您不需要检查文件中的任何内容,只需要检查文件是否存在

编辑

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

#!/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个以上的任务中使用这个不是一个好主意。

你可以放弃| |[[-n$line]]hack;它只需要容纳无效的POSIX文本文件,即不能正确以换行符结尾的Windows文本文件。我使用了cat而不是while,我发现它更容易理解。您可以使用外部文件来存储它运行的次数。我喜欢您的想法。您应该为此提供一个脚本。无论如何,这将限制两个任务的执行。读取文件增加了执行2次以上的灵活性。另一件事是我总是避免在脚本中使用rm。但在某些情况下,这是一个很好的方法。我添加了脚本,以防你想看。
#!/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
{ ~ }  » 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")
#!/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