Как правило, для запуска команды с правами root sudo достаточно.
#!/bin/bash
echo test
sudo whoami
Если вы настаиваете на использовании su, по какой-то причине вы можете использовать флаг -c:
#!/bin/bash
echo test
sudo su -c whoami
И вот результат в обоих случаях:
$ ./test.sh
test
[sudo] password for xieerqi:
root
Если вы хотите ввести корневую оболочку, используйте sudo -i
serg@ubuntu[/home/xieerqi]
$ sudo -i
# date
Fri Jun 19 13:16:15 EEST 2015
# whoami
root
# exit
serg@ubuntu[/home/xieerqi]
$
С su:
serg@ubuntu[/home/xieerqi]
$ sudo su -c /bin/bash
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
root@anaconda:/home/xieerqi# date
Fri Jun 19 12:41:06 EEST 2015
root@anaconda:/home/xieerqi# echo blah
blah
root@anaconda:/home/xieerqi# exit
exit
serg@ubuntu[/home/xieerqi]
$ whoami
xieerqi
Если вы хотите запускать команды как другой пользователь, а не только root, вы можете использовать sudo -u username command
$ sudo -u testuser whoami
testuser
То же самое с su:
serg@ubuntu[/home/xieerqi]
$ sudo su -c bash testuser
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
testuser@anaconda:/home/xieerqi$ whoami
testuser
testuser@anaconda:/home/xieerqi$ exit
exit
serg@ubuntu[/home/xieerqi]
$ whoami
xieerqi