假设我有两项任务。 当我们第二次运行脚本时,是否可以编写应该执行第一个任务的bash脚本(一个脚本),第二次运行脚本时再执行第二个任务,当我们第四次运行时运行第三个和第二个脚本时,是否可以执行第一个任务?
答案 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个任务并不是一个好主意。