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