ProgrammingThis forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
I want to read user input and write to a file with bash but this is not working for some reason. The script executes but nothing happens upon my input.
Code:
#!/bin/bash
networking() {
echo "Press 1 to write to /etc/network/interfaces"
read choice
if [ choice = 1 ]
then
echo auto eth0 > /etc/network/interfaces
echo address 192.168.1.122 >> /etc/network/interfaces
fi
}
networking;
PS. Others may also post and tell you to use [[ and ]] instead of [ and ] and also to use == instead of =. While that advice might be good practice for bash, it is not required to get your script working.
PS. Others may also post and tell you to use [[ and ]] instead of [ and ] and also to use == instead of =. While that advice might be good practice for bash, it is not required to get your script working.
Also you do not need " around 1: [ "$choice" = 1 ] is sufficient.
_____________________________________
If someone helps you, or you approve of what's posted, click the "Add to Reputation" button, on the left of the post.
Happy with solution ... mark as SOLVED
(located in the "thread tools")
In square-bracket shell tests "=,<,>," are string comparators. For integers, you need to use "-eq,-lt,-gt,-le,-ge".
Also, when using bash or ksh, it's recommended to use [[..]] for string/file tests, and ((..)) for numerical tests. Avoid using the old [..] test unless you specifically need POSIX-style portability.
And if I may offer another bit of advice, clean, consistent formatting makes code readable and more easily debuggable. Indent all your sub-commands, and separate logical sections with whitespace. Add comments anywhere the code isn't completely obvious (and remember, what seems obvious to you now will not be so a year or so down the line).
Many people also feel that it's more readable to place the "do/then" keywords on the same line as the "for/while/until/if" keywords, as it more clearly separates the outside block from the inside block. Example:
Code:
for var in fee fai foo fum ; do
if [[ "$var" == "foo" ]]; then
echo "Found 'foo'."
fi
done
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.