/ / Wykonuj inne zadanie za każdym razem, gdy wykonywany jest skrypt bash - linux, bash

Wykonuj inne zadanie za każdym razem, gdy wykonywany jest skrypt bash - linux, bash

Powiedzmy, że mam 2 zadania. Czy jest możliwe napisanie skryptu bash (jednego skryptu), który powinien wykonać pierwsze zadanie, gdy uruchamiamy po raz pierwszy i drugie zadanie, kiedy uruchamiamy skrypt po raz drugi i kolejny, gdy uruchamiamy trzeci raz i drugi skrypt, gdy uruchamiamy 4 raz?

Odpowiedzi:

1 dla odpowiedzi № 1

Tak, łatwo to zrobić, pamiętając / utrzymując to, co zostało uruchomione ostatnio.

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

Możesz także użyć logicznego 0 lub 1 wplik current_counter lub po prostu sprawdzając istnienie pliku, ale będzie działać tylko w tym przypadku. Powyższy skrypt łatwo skaluje się, jeśli masz więcej zadań (nie tylko 2), np. 3 lub nawet 100; następnie wystarczy zmienić liczbę modułów i dodać więcej warunków do obsługi każdej pozostałości.


0 dla odpowiedzi nr 2

Zbyt trudno było mi przeczytać skrypt ritesht93, więc zrobiłem własne.

Wersja Bash

Uruchomienie skryptu zapewnia następujące dane wyjściowe:

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

Najpierw tworzymy plik z numerem 1:

{ ~ }  » echo 1 > counter

Treść skryptu (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

Wersja Pythona 3.0 (w razie potrzeby)

Miałem też czas zrobić to w pytonie:

Najpierw tworzymy plik z numerem 1:

{ ~ }  » echo 1 > counter

Treść skryptu:

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

0 dla odpowiedzi № 3

To nawet łatwiejsze niż dwie poprzednie odpowiedzi. Po prostu utwórz pusty plik kontrolny. Touch control i usuń przy pomocy rm controlna przykład.

Kiedy go uruchomisz, sprawdź, czy istnieje, czy go zniszczysz i uruchom drugie zadanie, jeśli nie uruchomisz pierwszego i utworzysz je.

Nie musisz niczego sprawdzać wewnątrz pliku tylko jego istnienie.

Edytować

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

Możesz dodać więcej zadań, używając różnych nazw jako następnego skryptu:

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

W każdym razie myślę, że użycie tego z ponad 2 zadaniami nie jest dobrym pomysłem.