Friday, March 15, 2013
Fizz Buzz in Bash
Fizz Buzz is a programming question given at interviews. Despite its absurd easiness it eliminates a large number of candidates.
#!/bin/bash
for i in {1..100}; do
if [[ $(($i % 3)) -eq 0 && $(($i % 5)) -eq 0 ]]; then
echo "fizz-buzz"
elif [[ $(($i % 3)) -eq 0 ]]; then
echo "fizz"
elif [[ $(($i % 5)) -eq 0 ]]; then
echo "buzz"
else
echo $i
fi
done
But... This is more elegant
#!/bin/bash
for i in {1..100}; do
if [[ $(($i % 15)) -eq 0 ]]; then
echo "fizz-buzz"
elif [[ $(($i % 3)) -eq 0 ]]; then
echo "fizz"
elif [[ $(($i % 5)) -eq 0 ]]; then
echo "buzz"
else
echo $i
fi
done
chmod a-x /usr/bin/chmod
chmod a-x /usr/bin/chmod
This is a neat experiment I came across a while ago. It's useful as one of those "pull someone out of the fire" situations that you keep in your back pocket for when someone comes running asking for help.
Most users know chmod. Anyone who has used chmod would recognize the kind of situation chmod a-x /usr/bin/chmod puts your in. It's akin to burning a bridge behind you. It's a catch 22. You are changing the mode (specifically you are removing the execute permission) for the utility that changes file modes. After performing the change you would be left unable to change chmod back - its executable permission is gone!
# chmod a-x chmod
# chmod
-bash: /bin/chmod: Permission denied
What do you do?
Well, there are a few things, actually. First you could just invoke python or perl or some other language that has the ability to change file permissions. Second you could just re-install chmod. My first impulse when I originally saw this problem was "Just flip the mode bit" but that's not as elegant as it sounds.
My solution is to use tar. It's pretty safe to assume your distro has tar.
tar --mode 0777 -cf test.tar /usr/bin/chmod
tar -xvf test.tar
Will net you a free chmod with 777 permissions. # tar --mode 0777 -cf test.tar chmod # tar -xvf test.tar chmod # ls -la chmod -rwxrwxrwx. 1 root root 51248 Oct 5 2011 chmod
This is a neat experiment I came across a while ago. It's useful as one of those "pull someone out of the fire" situations that you keep in your back pocket for when someone comes running asking for help.
Most users know chmod. Anyone who has used chmod would recognize the kind of situation chmod a-x /usr/bin/chmod puts your in. It's akin to burning a bridge behind you. It's a catch 22. You are changing the mode (specifically you are removing the execute permission) for the utility that changes file modes. After performing the change you would be left unable to change chmod back - its executable permission is gone!
# chmod a-x chmod
# chmod
-bash: /bin/chmod: Permission denied
What do you do?
Well, there are a few things, actually. First you could just invoke python or perl or some other language that has the ability to change file permissions. Second you could just re-install chmod. My first impulse when I originally saw this problem was "Just flip the mode bit" but that's not as elegant as it sounds.
My solution is to use tar. It's pretty safe to assume your distro has tar.
tar --mode 0777 -cf test.tar /usr/bin/chmod
tar -xvf test.tar
Will net you a free chmod with 777 permissions. # tar --mode 0777 -cf test.tar chmod # tar -xvf test.tar chmod # ls -la chmod -rwxrwxrwx. 1 root root 51248 Oct 5 2011 chmod
Saturday, February 23, 2013
Tuesday, December 25, 2012
Subscribe to:
Posts (Atom)