Sponsored Content
Homework and Emergencies Homework & Coursework Questions If statements in Linux terminal Post 302861473 by bakunin on Wednesday 9th of October 2013 04:34:38 AM
Old 10-09-2013
Quote:
Originally Posted by sea
First time i see constantly used the ( for if statements, i'm used to [..
To explain that i have to dig into UNIX history somewhat:

First: The general form of the if-statement in Bourne-descendant shells (ksh, bash, [POSIX-]sh, etc.) is:

Code:
if command ; then

Which branch of the if-statement (the "if"- or the "else"-branch) is executed is decided by examining the return code (error level) of the command. The following lines will do absolutely the same, but the latter is preferable because it saves on fork()-calls:

Code:
/some/command
if [ $? -eq 0 ] ; then

Code:
if /some/command ; then

What is now if [ .... ], you might ask.

Because of the mechanism of if the UNIX designers came up with a clever utility: test. This command executes all sorts of comparisons and sets its return code according to the result of these comparison. If you wanted to branch on two variables being equal you could do (i have marked bold the test-command and its parameters):

Code:
if /usr/bin/test $a -eq $b ; then

Now, this looked a bit unhandy. Therefore a further trick was to create a link /usr/bin/[ to /usr/bin/test, the line would now look like:

Code:
if [ $a -eq $b ; then

But this still was not completely satisfactory, because programmers are religiously raised to close what they open: quotes, brackets, braces, clauses, ....

Therefore, the last twist was to create /usr/bin/[ as a program in its own right which works just like /usr/bin/test but requires a "]" as the last parameter. Now the code as we know it were possible:

Code:
if [ $a -eq $b ] ; then

Notice, though, that "[" is a command and "]" is one of its parameters. Therefore, the following are all syntactically wrong (for obvious reasons):

Code:
if [$a -eq $b ] ; then
if[ $a -eq $b ] ; then
if [ $a -eq $b] ; then

OK, this is all good, but what is if [[ ... then?

In fact "[[" is the same as "[", but as a shell-built-in instead of an external command. Shell developers found out that test and its companion [ were used so oftenly that they built it into their shells to save on system calls.

Lastly, what is if (( ... )) now?

Well, the same as i wrote above: if command, where command is a device in ksh as well as bash: you can do integer math surrounded by double rounded brackets:

Code:
(( x += 1 ))

is a legal command and the same as (in fact a substitution for) the (quite old-fashioned) built-in let:

Code:
let x=x+1

Like let also (( ... )) has a return code and this is what if acts upon.

I hope this clears it up a bit.

bakunin

Last edited by bakunin; 10-09-2013 at 05:39 AM..
This User Gave Thanks to bakunin For This Post:
 

9 More Discussions You Might Find Interesting

1. Solaris

Terminal settings from linux to solaris

When I log in from my linux workstation (CentOS4) to a solaris 8 server using SSH or telnet, the terminal settings don't seem to work well. When I tail or vi a file, I get a blank screen or no response, and I am no longer able to interact with the session. I have to type the escape sequence to... (2 Replies)
Discussion started by: tjlst15
2 Replies

2. Shell Programming and Scripting

How to have color coded Terminal display,(like linux)

Hi all, I would like to know how to have a color display in the terminal... In the sense that, In many linux terminals,we have color coded for each file type, green for executable ,blue for dirs and so on... I wanted to know how i can have the same arrangement in solaris(b-79a) I am not... (5 Replies)
Discussion started by: wrapster
5 Replies

3. Ubuntu

Error on my Linux terminal

Hi, I keep on getting the following error on my linux terminal. It did not harm my system so far, but I was wondering if this can be eliminated. { Gecko:4617): GLib-GObject-CRITICAL **: file gobject.c: line 1337 (g_object_unref): assertion `G_IS_OBJECT (object)' failed (Gecko:4617):... (2 Replies)
Discussion started by: gsabarinath
2 Replies

4. Windows & DOS: Issues & Discussions

looking for linux like tab terminal for windows

Hello all is there any free tool like linux tabbed terminal but for windows im used to work with putty and its great but i wander if there something like putty but with tabs thanks (12 Replies)
Discussion started by: umen
12 Replies

5. Linux

how to perform a system check on linux via terminal

hi im new to this and i just want to learn about linux and i just wanted to know how would i be able to perform a system check to see if a directory exists. can any one help me? (2 Replies)
Discussion started by: roozis
2 Replies

6. Homework & Coursework Questions

help with linux terminal window

Hello! I need to create a file and provide access to two users of the file under the same command in linuxs terminal window. The question is how can I do it? (3 Replies)
Discussion started by: Messe
3 Replies

7. UNIX for Dummies Questions & Answers

Is there picture based game under linux terminal?

Is there picture based game under linux terminal? Just like Supermario under DOS. (18 Replies)
Discussion started by: vistastar
18 Replies

8. UNIX for Dummies Questions & Answers

Linux terminal server?

Hello everyone, I have an interesting project I'd like to implement on a Linux server here at work. Essentially, I'd like to replace a handful of Windows servers with a single Linux server. The only task these Windows servers perform, is provide remote desktops via RDP protocol that people... (13 Replies)
Discussion started by: lupin..the..3rd
13 Replies

9. UNIX for Advanced & Expert Users

Getting the process ID of the terminal in Unix/Linux

Hi, How can we get the process id of the terminal we are using? When we logged in to unix, we have an associated terminal. we can use "tty" command to get the terminal we are using like: /dev/pts/0 I want to know the process id of this terminal. Please reply as I searched a lot but I... (8 Replies)
Discussion started by: crazybisu
8 Replies
All times are GMT -4. The time now is 12:03 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy