In this case I had to create a view to website where lunch list changes every week in three week cycles. I did actual view with PHP, but the number changes every week was better done to separately. PHP is only loaded when someone visits the page, and no one visits that page in the middle of the night. So I made a Bash script which reads a file's first line, then add one to that number and write the new number to the file. This tutorial is how that Bash script works, not about the list view.
Sometimes you may want to look at a file's first line only. Command head is very useful for this. If you want to read only the first line of the file:
head -n 1 file
And if you want to see three lines of that file:
head -n 3 file
You can also used
sed. This prints the first line and then quits:
sed q file
In this case I wanted to read the first line of the file and save it as variable.
file=“/path/to/file.txt” line=$(head -n 1 “$file”)
Now I have a number. If the number is not bigger than three, add one to that number. If the number is bigger than three it should be reset to one.
(( line > 3 )) && (( line++ )) || line=1 echo “$line” > “$file”
Now we have a new number which tells us which list we want to use next week and the script wrote it to the file. Here's the same script as a whole and shortcutted by galaktos from reddit. Thanks for help.
#!/bin/bash file="/path/to/file.txt" line=$(head -n1 -- "$file") printf '%d\n' "$((++line>3?1:line))" >| "$file"
How to run a script automatically in Linux
Crontab is our friend when want to do things automatically in Linux. I wanted the script to run every Saturday. Create a new file and put this line in it:
0 0 * * Sat /home/user/scripts/bash-script
This command runs every Saturday at 00:00.
Cron timing: minute 0-59, hour 0-23, day of month 1-31, month 1-12, day of week 0-6 (or Sun-Sat).
Active it with command:
Now we are all set. The number will change every Saturday till the end of the days (or till the server is dead).