Comment écrire un script shell qui exécute des commandes en tant que superutilisateur et certaines commandes pas en tant que super-utilisateur, sans avoir à garder des enfants il?

Je veux écrire un script shell pour automatiser une série de commandes. Le problème est que certaines commandes DOIT être exécuté en tant que superutilisateur et certaines commandes ne DOIT PAS être exécuté en tant que superutilisateur. Ce que j'ai fait jusqu'à présent est quelque chose comme ceci:

#!/bin/bash

command1
sudo command2
command3
sudo command4

Le problème est, cela signifie que quelqu'un doit attendre jusqu'à ce que command1 finitions avant qu'ils êtes invité pour un mot de passe, puis, si command3 prend assez longtemps, puis, ils devront attendre pour command3 à la fin. Ce serait bien si la personne peut se lever et marcher loin, puis de revenir une heure plus tard et à faire. Par exemple, le script suivant a ce problème:

#!/bin/bash

sleep 310
sudo echo "Hi, I'm root"
sleep 310
sudo echo "I'm still root?"

Comment puis-je faire en sorte que l'utilisateur peut simplement entrer leur mot de passe une fois, au tout début, et puis à pied?

Mise à jour:

Merci pour les réponses. Je suis en cours d'exécution sur Mac OS X Lion et a couru Stephen P du script et a obtenu des résultats différents: (j'ai aussi ajouté $HOME)

pair@abbey scratch$ ./test2.sh
uid is 501
user is pair
username is 
home directory is /Users/pair
pair@abbey scratch$ sudo ./test2.sh 
Password:
uid is 0
user is root
username is root
home directory is /Users/pair
InformationsquelleAutor speedarius | 2012-04-19