We looked at one form of user input command line arguments in the previous section. Now we would like to introduce other ways the user may provide input to the Bash script. Following this we'll have a discussion on when and where is best to use each method. If we would like to ask the user for input then we use a command called read. This command takes the input and will save it into a variable. You are able to alter the behaviour of read with a variety of command line options.
See the man page for read to see all of them. Two commonly used options however are -p which allows you to specify a prompt and -s which makes the input silent. This can make it easy to ask for a username and password combination like the example below:. The general mechanism is that you can supply several variable names to read. Read will then take your input and split it on whitespace.
The first item will then be assigned to the first variable name, the second item to the second variable name and so on. If there are more items than variable names then the remaining items will all be added to the last variable name. If there are less items than variable names then the remaining variable names will be set to blank or null.
It's common in Linux to pipe a series of simple, single purpose commands together to create a larger solution tailored to our exact needs. The ability to do this is one of the real strenghs of Linux. It turns out that we can easily accommodate this mechanism with our scripts also. By doing so we can create scripts that act as filters to modify data in specific ways for us. Bash accomodates piping and redirection by way of special files. Each process gets the following files:.
So if we would like to make our script able to process data that is piped to it all we need to do is read the relevant file. All of the files mentioned above behave like normal files. You should normally favor command line arguments wherever possible.
They are the most convenient for users as the data will be stored in their command history so they can easily return to it. It is also the best approach if your script may be called by other scripts or processes eg. Sometimes the nature of the data is such that it would not be ideal for it to be stored in peoples command histories etc. A good example of this is login credentials username and password. In these circumstances it is best to read the data during script execution.
If all the script is doing is processing data in a certain way then it is probably best to work with STDIN. This way it can easily be added into a pipeline.
Shell Programming and Scripting
It only takes a minute to sign up. I want to write an application in Python that you can use with your default keyboard and a specially designed one for the application. I will design it simply by using a small numerical keyboard with stickers to give actions to the different keys.
Both keyboards will be attached by USB. However, when these keys are pressed, just their regular signals numbers, operators and enterswill be send to Python and it will not be able to distinguish between the signals from the main keyboard and the special keyboard.
Because Python has as far as I could find no method for making this distinguishment, I want to do it on the OS itself. I will be programming it for the Raspberry Pi, so it will be Linux. So, the main question: How can I remap the keys of a specific keyboard to other keycodes.
I thought about using the F-keys which I won't use for other purposes; or just some characters that are not present on any keyboard supposing that there are such.
If you're using Linux, the best way to distinguish between input devices is to use the Linux Event Interface. This is completely independent of the programming language you use, by the way.
You open the device, and every time an event arrives from the input hardware, you'll get a packet of data.
Input Output Redirection in Linux/Unix Examples
If you don't, you could read this question which provides all the information you need. The good thing about the event interface is that you just find out what device you need, and you can read input from that input device onlyignoring all others.
An alternative approach if your "keyboard" doesn't have many keys - many devices pretend to be keyboards is to apply a keymapping to each keyboard specifically and ensure that keys are distinguished. The main point being the setxkbmap takes a device argument.
Sign up to join this community. The best answers are voted up and rise to the top. Home Questions Tags Users Unanswered. How to distinguish input from different keyboards? Ask Question. Asked 7 years ago. Active 3 years, 3 months ago. Viewed 10k times. And if so, how can I do it? Gilles 'SO- stop being evil' k gold badges silver badges bronze badges.
Steven Roose Steven Roose 1 1 gold badge 2 2 silver badges 10 10 bronze badges. How is the keyboard going to be attached? You may want to read straight from the device. That's the most obvious way to me, although I suppose there's some better way. I added that they will connect by USB. How can I read directly from the device using Python? It looks like the not-accepted answer is a lot simpler than the accepted one. Active Oldest Votes. Alexios Alexios If you are using the raw input approach the lsinput will find your raw device for you.
Att Righ Att Righ 6 6 silver badges 19 19 bronze badges. Sign up or log in Sign up using Google. Sign up using Facebook.Answer: I usually use the shell script read function to read input from a shell script.
Here are two slightly different versions of the same shell script. I prefer the second approach, but I thought I'd share both of them here. They are subtly different, so not the extra break in the first script.
This Linux Bash 'read' function is nice, because it does both things, prompting the user for input, and then reading the input.
The other nice thing it does is leave the cursor at the end of your prompt, as shown here:. I wouldn't normally show that, but invoking man like this brings up the "Bash builtins" man page, instead of the normal Bash shell man page, and in this case, this documentation is more of what you need.
I hope this example of how to read shell script command line arguments has been helpful. As you can see, knowing about the Bash read function, and also knowing the Bash shell case function, are both important in this solution. How to prompt and read user input in a Bash shell script. By Alvin Alexander. Last updated: June 22, The other nice thing it does is leave the cursor at the end of your prompt, as shown here: Run the cron script now? How to read and write from a file in a Linux bash shell script.
How to prompt users for input from Scala shell scripts. How to access command-line arguments in Scala shell scripts. Original devdaily.How to change keyboard input methods for different languages in Ubuntu 14.04.
Valley Programming postcard. Zen Foundation business card.Today's Posts. Quick Links. Search Forums. Show Threads. Show Posts. Shell Programming and Scripting. Accepting user input in c shell. Registered User. Join Date: Sep I forget to mention the initial part of code i.
It works. Solaris LDOM not accepting keyboard input at console. Ran into this issue today and wanted to share how I fixed it as there is not a lot a lot of info online on this issue. One of the LDOM did not come up cleanly and it would not accept any keyboard inputs Accepting Input regardless of Case. Hi I am trying to get my script to accept input regardless if the person enters a or A.
Accepting user input and arguments in PERL. Hi All, Can we pass arguments while calling the perl script and as well as ask user input during execution of the script?
My program is as below: I am passing arg1 and arg2 as argements to test. Displaying default values when accepting input from user. Is there a way to display the default answer when accepting input from the user in the unix script. I how do i accept a input date in script which is lesser than a specified day? Accepting user input in Bourne shell and using sed.
He guys. Basically I want to make a script that can add, delete and view stuff in a external file called config. I can open it up in Joe but im not sure how to read in the user input or using commands automatically in joe to edit, save then quit.
It only takes a minute to sign up. I am making a Ruby program so I can play different sounds when a key is pressed. Key A will make different sound from key S and so on. I want to get raw inputs rather than using some ruby gems.
I can use it in my code so that it can do some job based on the mouse movements. There are two layers involved here: The input layer of the kernel, which translates various keyboard, mice, joysticks etc. The latter combines the input devices and makes them available as "keyboard events from any device" and "mouse events from any device" this is a simplification, but ok is first aproximation. The natural way for an application is to interact with the X layer and I'm sure there as a Ruby abstraction for that.
This is in particular recommended if your application not only plays sounds, but also displays something and even if it doesn't display anything. This file may not match what the X layer considers active mouse input devices, and there's no equivalent abstraction for keyboards.
Sign up to join this community. The best answers are voted up and rise to the top. Home Questions Tags Users Unanswered. Read keyboard inputs in Linux Ask Question.
Asked 11 months ago. Active 11 months ago. Viewed times. By opening which file can I grab all the keyboards' events? Goswami S. Goswami 7 7 silver badges 17 17 bronze badges. Active Oldest Votes. Goswami Apr 22 '19 at The basic workflow of any Linux command is that it takes an input and give an output. The standard input stdin device is the keyboard.
The standard output stdout device is the screen. Examples Click here if the video is not accessible. Note : Use the correct file name while redirecting command output to a file. If there is an existing file with the same name, the redirected command will delete the contents of that file and then it may be overwritten. You can redirect standard output, to not just files, but also devices! If the sound configurations in your PC are correct, this command will play the file music.
You can type the contents of the email using the standard device keyboard. But if you want to attach a File to email you can use the input re-direction operator in the following format. The above examples were simple. Let's look at some advance re-direction techniques which make use of File Descriptors.
Regular file, Directories, and even Devices are files. Your screen also has a File Descriptor. When a program is executed the output is sent to File Descriptor of the screen, and you see program output on your monitor. If the output is sent to File Descriptor of the printer, the program output would have been printed.
These files are always present whenever a program is run. As explained before a file descriptor, is associated with each of these files.
Error redirection is routing the errors to a file other than the screen. Why Error Redirection? Frequent UNIX users will reckon that many commands give you massive amounts of errors. For instance, while searching for files, one typically gets permission denied errors. These errors usually do not help the person searching for a particular file.
While executing shell scripts, you often do NOT want error messages cluttering up the normal program output. The solution is to re-direct the error messages to a file.Previous Contents Next. Up to now, our scripts have not been interactive.
That is, they did not require any input from the user. In this lesson, we will see how your scripts can ask questions, and get and use responses. To get input from the keyboard, you use the read command. The read command takes input from the keyboard and assigns it to a variable. Here is an example:. As you can see, we displayed a prompt on line 3. Note that " -n " given to the echo command causes it to keep the cursor on the same line; i.
Next, we invoke the read command with " text " as its argument. What this does is wait for the user to type something followed by a carriage return the Enter key and then assign whatever was typed to the variable text. If you don't give the read command the name of a variable to assign its input, it will use the environment variable REPLY. The read command also takes some command line options. The two most interesting ones are -t and -s.
The -t option followed by a number of seconds provides an automatic timeout for the read command. This means that the read command will give up after the specified number of seconds if no response has been received from the user. This option could be used in the case of a script that must continue perhaps resorting to a default response even if the user does not answer the prompts. Here is the -t option in action:. The -s option causes the user's typing not to be displayed.
This is useful when you are asking the user to type in a password or other confidential information. Since we are working on a computer, it is natural to expect that it can perform some simple arithmetic. The shell provides features for integer arithmetic. What's an integer? That means whole numbers like 1, 2, It does not mean fractional numbers like 0.
If you must deal with fractional numbers, there is a separate program called bc which provides an arbitrary precision calculator language. It can be used in shell scripts, but is beyond the scope of this tutorial.
As you can see, when you surround an arithmetic expression with the double parentheses, the shell will perform arithmetic expansion. The shell can perform a variety of common and not so common arithmetic operations. Try this program out and watch how it handles division remember, this is integer division and how it handles large numbers. Numbers that get too large overflow like the odometer in a car when you exceed the number of miles it was designed to count.
It starts over but first it goes through all the negative numbers because of how integers are represented in memory. Division by zero which is mathematically invalid does cause an error.