Bash test: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 44: Line 44:
=String Comparison=
=String Comparison=


< and > can be used for string comparison, in ASCII alphabetical order, but the [[https://kb.novaordis.com/index.php/Bash_Expressions#.5B.5B....5D.5D|extended test command &#91;[ ... ]]]]:
< and > can be used for string comparison, in ASCII alphabetical order, but the [[Bash_Expressions#.5B.5B....5D.5D|extended test command &#91;[ ... ]]]]:


  if [[ "${a}" > "${b}" ]]; them
  if [[ "${a}" > "${b}" ]]; them

Revision as of 03:30, 26 February 2018

External

Internal

Overview

'test' is a bash built-in command which tests the expression following it, according to the syntax described below. 'test' and [...] are synonymous and can be used interchangeably.

Negation

[ ! -f ${file} ] && echo "we're not a file" || echo "we're a file"

-e

True if file exists (regardless of type).

-f

True if file exists and is a regular file.

-w

True if file exists and is writable.

-h

Tests whether the file exists and it is a symbolic link.

[ -h $0 ] && echo "we're a link" || echo "we're not a link"

Integer Comparison

[arg1 -eq|-ne|-lt|-le|-gt|-ge arg2]

String Comparison

< and > can be used for string comparison, in ASCII alphabetical order, but the extended test command [[ ... ]]:

if [[ "${a}" > "${b}" ]]; them
    ...
fi

-z, -n

-z: true if the length of the string is zero.

-n: true if the length of string is non-zero.

Can be used to check for undeclared variables

[ -z ${var} ] && echo" 'var' not declared"
Quotation marks around the variables are needed, otherwise the expression will fail syntactically when the variable is declared and it contains a space:
var="a b"

...

line 177: [: 900: binary operator expected

Combining test and Command Conditionals

Not sure if this belongs here, refactor with https://home.feodorov.com:9443/wiki/Wiki.jsp?page=bashConditionalConstructs

verbose=false

if ! ${verbose} && [ "$1" = "--verbose" -o "$1" = "-v" ]; then
    echo "setting verbose to ON"
fi
Must have a space between ! and the command that evaluates to true or false.