55

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:

#!/bin/sh

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 updatesystem elif [ "$mainmenuinput" = "2" ]; then installsamba elif [ "$mainmenuinput" = "3" ]; then installvsftpd elif [ "$mainmenuinput" = "4" ]; then installwebmin elif [ "$mainmenuinput" = "5" ]; then configuresambaforactivedirectory elif [ "$mainmenuinput" = "x" ];then quitprogram elif [ "$mainmenuinput" = "X" ];then quitprogram else echo "You have entered an invallid selection!" echo "Please try again!" echo "" echo "Press any key to continue..." read -n 1 clear mainmenu fi }

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

mainmenu

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!

Cadoiz
  • 278
Elliot Huffman
  • 797
  • 1
  • 5
  • 16

1 Answers1

79

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.

heemayl
  • 91,753
NGRhodes
  • 9,490