- switch statement in conditions and flow control
Condition | Description |
---|---|
[[ INTERGER1 -eq INTEGER2 ]] |
INTEGER1 is equal to INTEGER2 |
[[ INTEGER1 -ne INTEGER2 ]] |
INTEGER1 is not equal to INTEGER2 |
[[ INTEGER1 -lt INTEGER ]] |
INTEGER1 is less than INTEGER2 |
[[ INTEGER1 -le INTEGER2 ]] |
INTEGER1 is less than or equal to INTEGER2 |
[[ INTEGER1 -gt INTEGER2 ]] |
INTEGER1 is greater than INTEGER2 |
[[ INTERGER1 -ge INTEGER2 ]] |
INTEGER1 is greater than or equal to INTEGER2 |
(( INTEGER1 < INTEGER2 )) |
INTEGER1 is less than INTEGER2 |
(( INTEGER1 <= INTEGER2 )) |
INTEGER1 is less than INTEGER2 |
(( INTEGER1 > INTEGER2 )) |
INTEGER1 is greater than INTEGER2 |
(( INTEGER1 >= INTEGER2 )) |
INTEGER1 is greater than or equal to INTEGER2 |
(( INTEGER1 == INTEGER2 )) |
INTEGER1 is equal to INTEGER2 |
(( INTEGER1 != INTEGER2 )) |
INTEGER1 is not equal to INTEGER2 |
Condition | Description |
---|---|
[[ -z STR ]] |
Empty string |
[[ -n STR ]] |
Not empty string |
[[ STR == STR ]] |
Equal |
[[ STR = STR ]] |
Equal (Same above) |
[[ STR < STR ]] |
Less than (ASCII) |
[[ STR > STR ]] |
Greater than (ASCII) |
[[ STR != STR ]] |
Not Equal |
[[ STR =~ REGEXP ]] |
Regexp |
Condition | Description |
---|---|
[[ -o noclobber ]] |
If OPTION is enabled. |
EXPR |
expression is true |
! EXPR |
negate expression |
Condition | Expression |
---|---|
[[ -b FILE ]] |
FILE exists and is block special |
[[ -c FILE ]] |
FILE exists and is character special |
[[ -d FILE ]] |
FILE exists and is a directory |
[[ -e FILE ]] |
FILE exists |
[[ -f FILE ]] |
FILE exists and is a regular file |
[[ -g FILE ]] |
FILE exists and is set-group-ID |
[[ -G FILE ]] |
FILE exists and is owned by the effective group ID |
[[ -h FILE ]] |
FILE exists and is a symbolic link (same as -L ) |
[[ -k FILE ]] |
FILE exists and has its sticky bit set |
[[ -L FILE ]] |
FILE exists and is a symbolic link (same as -h ) |
[[ -N FILE ]] |
FILE exists and has been modified since it was last read |
[[ -O FILE ]] |
FILE exists and is owned by the effective user ID |
[[ -p FILE ]] |
FILE exists and is a named pipe |
[[ -r FILE ]] |
FILE exists and the user has read access |
[[ -s FILE ]] |
FILE exists and has a size greater than zero |
[[ -S FILE ]] |
FILE exists and is a socket |
[[ -t FD ]] |
file descriptor FD is opened on a terminal |
[[ -u FILE ]] |
FILE exists and its set-user-ID bit is set |
[[ -w FILE ]] |
FILE exists and the user has write access |
[[ -x FILE ]] |
FILE exists and the user has execute (or search) access |
[[ FILE1 -nt FILE2 ]] |
FILE1 is newer (modification date) than FILE2 |
[[ FILE1 -ot FILE2 ]] |
FILE1 is older than FILE2 |
[[ FILE1 -ef FILE2 ]] |
FILE1 and FILE2 have the same device and inode numbers or both files are the same |
Condition | Description |
---|---|
[[ condition1 ]] && [[ condition2 ]] |
Evaluate to True if both conditions are TRUE |
`[[ condition1 ]] | |
[ condition1 -a condition2 ] |
Evaluate to True if both conditions are TRUE |
[ condition1 -o condition2 ] |
Evaluate to True if either one of the conditions TRUE |
<aside>
💡 Note: It is worth mentioning that you can replace all the double square brackets with single square brackets for example : [[ NUM -eq NUM ]]
can also be written as [ NUM -eq NUM ]
. This works with all the all conditions except for compound conditions which uses -a
(AND) and -o
(OR) as logical operators.
</aside>
(.......)
allow you to use subshells in your if statement comparisons.(( epression ))
command allows you to incorporate advanced mathematical formulas in your comparisons. check out performing arithmetic operations.[[.......]]
command provides advanced features for string comparisons.