# Programming Tutorials

## test command or [ expr ] in Linux Shell Script

By: Dorris Printer Friendly Format

test command or [ expr ] is used to see if an expression is true, and if it is true it return zero(0), otherwise returns nonzero for false.
Syntax:
test expression OR [ expression ]

Example:
Following script determine whether given argument number is positive.

```\$ cat > ispostive #!/bin/sh # # Script to see whether argument is positive # if test \$1 -gt 0 then echo "\$1 number is positive" fi```

Run it as follows
\$ chmod 755 ispostive

\$ ispostive 5
5 number is positive

\$ispostive -45
Nothing is printed

\$ispostive
./ispostive: test: -gt: unary operator expected

Detailed explanation
The line, if test \$1 -gt 0 , test to see if first command line argument(\$1) is greater than 0. If it is true(0) then test will return 0 and output will printed as 5 number is positive but for -45 argument there is no output because our condition is not true(0) (no -45 is not greater than 0) hence echo statement is skipped. And for last statement we have not supplied any argument hence error ./ispostive: test: -gt: unary operator expected, is generated by shell , to avoid such error we can test whether command line argument is supplied or not.

test or [ expr ] works with
1.Integer ( Number without decimal point)
2.File types
3.Character strings

For Mathematics, use following operator in Shell Script

 Mathematical Operator in  Shell Script Meaning Normal Arithmetical/ Mathematical Statements But in Shell For test statement with if command For [ expr ] statement with if command -eq is equal to 5 == 6 if test 5 -eq 6 if [ 5 -eq 6 ] -ne is not equal to 5 != 6 if test 5 -ne 6 if [ 5 -ne 6 ] -lt is less than 5 < 6 if test 5 -lt 6 if [ 5 -lt 6 ] -le is less than or equal to 5 <= 6 if test 5 -le 6 if [ 5 -le 6 ] -gt is greater than 5 > 6 if test 5 -gt 6 if [ 5 -gt 6 ] -ge is greater than or equal to 5 >= 6 if test 5 -ge 6 if [ 5 -ge 6 ]

NOTE: == is equal, != is not equal.

For string Comparisons use

 Operator Meaning string1 = string2 string1 is equal to string2 string1 != string2 string1 is NOT equal to string2 string1 string1 is NOT NULL or not defined -n string1 string1 is NOT NULL and does exist -z string1 string1 is NULL and does exist

Shell also test for file and directory types

 Test Meaning -s file Non empty file -f file Is File exist or normal file and not a directory -d dir Is Directory exist and not a file -w file Is writeable file -r file Is read-only file -x file Is file is executable

Logical Operators

Logical operators are used to combine two or more condition at a time

 Operator Meaning ! expression Logical NOT expression1  -a  expression2 Logical AND expression1  -o  expression2 Logical OR