I recently had a requirement to change the email for all shell scripts from personal ([email protected]) to a DBA list ([email protected]).
Typically, directories for shell scripts are scheduled using crontab. If shell scripts aren’t scheduled with crontab, then we’d need to find all the locations for shell scripts – this is beyond the scope of this post.
First, I checked crontab to find the shell scripts located in the directory /home/vagrant/scripts.
[[email protected] ~]$ crontab -l 5 4 * * * /home/vagrant/scripts/test.sh something > /tmp/test.out 2>&1 [[email protected] ~]$ [[email protected] ~]$ crontab -l|grep -v '#'|grep sh|awk '{print $6}'|sort -u /home/vagrant/scripts/test.sh [[email protected] ~]$
Next, I reviewed the shell scripts from the directory.
### Note: dt.sh is not schedule from crontab and resides in the same directory. [[email protected] scripts]$ ls -l total 12 -rwxrwxr-x. 1 vagrant vagrant 25 Feb 4 21:15 dt.sh -rwxrwxr-x. 1 vagrant vagrant 20 Feb 4 21:14 test.sh [[email protected] scripts]$
I created edit_email.sh to search and replace email from all shell scripts (.sh) using sed (stream editor).
Because the AIX version I tested doesn’t support in-place search and replace using sed, I had to create a temporary file.
The implementation below will work for most operating systems:
[[email protected] scripts]$ cat ./edit_email.sh for infile in $(grep '[email protected]' *.sh|grep sh|awk -F':' '{print $1}'|sort -u|grep -v `basename $0`) do echo $infile sed 's/\[email protected]\b/[email protected]/g' $infile > tmp.$$ mv tmp.$$ $infile chmod 755 $infile grep 'gmail.com' $infile done [[email protected] scripts]$
Finally, I ran edit_email.sh.
[[email protected] scripts]$ cat dt.sh date echo [email protected] echo [email protected] [[email protected] scripts]$ ### Note: [email protected] and [email protected] did not get updated. [[email protected] scripts]$ ./edit_email.sh dt.sh echo [email protected] echo [email protected] test.sh export PAGER_EMAIL="[email protected]" [[email protected] scripts]$
I hope you can see that using sed to search and replace is more more efficient and less prone to errors than editing each script manually.
If you have any thoughts or questions, please leave them in the comments.
No comments