Ask Ubuntu is a question and answer site for Ubuntu users and developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have a script that I am making and I have an issue with it: I would like to pause execution and wait for user input. I thought that I had it with the read -p -n 1 $foo command but the system is having issues with this command. Here is my current script:


# Ititialization

mainmenu () {
  echo "Press 1 to update your system"
  echo "Press 2 to install samba"
  echo "Press 3 to install vsFTPd"
  echo "Press 4 to install the current version of Webmin"
  echo "Press 5 to configure samba for Active Directory"
  echo "Press x to exit the script"
  read -n 1 -p "Input Selection:" mainmenuinput
  if [ "$mainmenuinput" = "1" ]; then
        elif [ "$mainmenuinput" = "2" ]; then
        elif [ "$mainmenuinput" = "3" ]; then
        elif [ "$mainmenuinput" = "4" ]; then
        elif [ "$mainmenuinput" = "5" ]; then
        elif [ "$mainmenuinput" = "x" ];then
        elif [ "$mainmenuinput" = "X" ];then
            echo "You have entered an invallid selection!"
            echo "Please try again!"
            echo ""
            echo "Press any key to continue..."
            read -n 1

# This builds the main menu and routs the user to the function selected.


# This executes the main menu function.
# Let the fun begin!!!! WOOT WOOT!!!!

You may notice at the mainmenu function the read -n 1 -p "text goes here" entry. That is where I am having the issue according to ubuntu. Can somebody tell me what is going wrong? thanks!

share|improve this question
The shebang is wrong. You're using bash features, so the shebang must be set to #!/usr/bin/env bash or #!/bin/bash. – geirha Apr 13 '14 at 12:01
I will look into it! Thanks! – Elliot Labs Apr 13 '14 at 13:04
up vote 5 down vote accepted

Should be:

read  -n 1 -p "Input Selection:" mainmenuinput

Need to put the n flag after, as that is is telling read to execute after N characters are entered, do not wait for an entire line. Check help read and this for details.

share|improve this answer
The system does not spaz out any more!!! Thanks! Although it does now require me to push the enter/return key to continue. – Elliot Labs Apr 11 '14 at 12:05
I have figured it out! Here is the correct code: read -n 1 -p "Input Selection:" "mainmenuinput" It now does not wait for the press of the enter/return key :-) – Elliot Labs Apr 13 '14 at 17:05
"illegal option -n" – ses May 14 '14 at 20:06

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.