Για παράδειγμα, αν το καλέσουμε με
- Κώδικας: Επιλογή όλων
forallusers chown -R USER_NAME:USER_GROUP USER_HOME
τότε θα παράγει ένα αρχείο /tmp/forallusers_generated_script με περιεχόμενα παρόμοια με τα παρακάτω:
- Κώδικας: Επιλογή όλων
chown -R alkisg:alkisg /home/alkisg
chown -R user1:usersgroup /home/students/user1
chown -R user2:usersgroup /home/students/user2
chown -R user3:usersgroup /home/students/user3
Στη συνέχεια, αν δούμε ότι αυτό είναι που θέλουμε να εκτελέσουμε και δεν κάναμε κάποιο λάθος, τρέχουμε το αποτέλεσμα με
- Κώδικας: Επιλογή όλων
/tmp/forallusers_generated_script
Φυσικά αν θέλουμε το κάνουμε και edit πριν το τρέξουμε.
Υποθέτω ότι είναι αρκετά ασφαλές αφού δεν εκτελεί τίποτα. Προτάσεις για βελτίωση καλοδεχούμενες!
- Κώδικας: Επιλογή όλων
#!/bin/bash
# copyright 2008 Alkis Georgopoulos <http://alkisg.mysch.gr>
# distributed under the terms of the GNU General Public License version 3
# or any later version.
SCRIPT_NAME=`basename $0`
COMMAND_LINE=$@
if [ -z "$COMMAND_LINE" ]; then
echo "$SCRIPT_NAME generates scripts that execute a specified command for all users."
echo "It doesn't execute the resultant script, so it shouldn't cause any trouble."
echo "It's your responsibility to check and execute the generated script."
echo "Example usage:"
echo " $0 chown -R USER_NAME:USER_GROUP USER_HOME"
echo "Valid parameters:"
echo " USER_NAME, USER_ID, USER_GROUP, USER_GROUP_ID, USER_HOME"
exit
fi
echo "#!/bin/bash" > /tmp/forallusers_generated_script
echo "# Generated by the forallusers script - http://alkisg.mysch.gr" >> /tmp/forallusers_generated_script
echo >> /tmp/forallusers_generated_script
getent passwd | while read line
do
USER_NAME=`echo $line|awk -F ':' '{ print $1 }'`
USER_ID=`id -u $USER_NAME`
USER_GROUP=`id -gn $USER_NAME`
USER_GROUP_ID=`id -g $USER_NAME`
USER_HOME=`echo $line|awk -F ':' '{ print $6 }'`
# TODO: don't hardcode minimum and maximum user IDs
if (( $USER_ID >= 1000 && $USER_ID <= 2000 )); then
COMMAND="$COMMAND_LINE"
COMMAND=`echo "$COMMAND" | sed "s/USER_NAME/$USER_NAME/g"`
COMMAND=`echo "$COMMAND" | sed "s/USER_ID/$USER_ID/g"`
COMMAND=`echo "$COMMAND" | sed "s/USER_GROUP/$USER_GROUP/g"`
COMMAND=`echo "$COMMAND" | sed "s/USER_GROUP_ID/$USER_GROUP_ID/g"`
COMMAND=`echo "$COMMAND" | sed "s#USER_HOME#$USER_HOME#g"`
echo "$COMMAND"
echo "$COMMAND" >> /tmp/forallusers_generated_script
fi
done
echo
chmod +x /tmp/forallusers_generated_script
echo "Script saved at /tmp/forallusers_generated_script, you may execute it if you like the result"