IF/THEN/ELSE
Purpose
IF
statements test if a condition is met.
Syntax
if [test condition]
then ACTIONS
elif [OTHER TESTS]
OTHER_ACTIONS
else OTHER_ACTIONS
fi
OR
if [test condition]; then ACTIONS ; elif [OTHER TESTS]; OTHER ACTIONS; else OTHER_ACTIONS ; fi
prompt> a=apple
prompt> if [[ $a == "pear" ]] ; then echo "MATCH" ; else echo "NO-MATCH"; fi
NO-MATCH
prompt> a=pear
prompt> if [[ $a == "pear" ]] ; then echo "MATCH" ; else echo "NO-MATCH"; fi
MATCH
Common test conditions:
Strings and Arithmetic
Operator | Meaning |
---|---|
String | Comparison |
= | Equal to |
== | Equal to |
!= | Not equal to |
< | Less than (ASCII) |
> | Greater than (ASCII) |
-z | String is empty |
-n | String is not empty |
Arithmetic | Comparison |
-eq | Equal to |
-ne | Not equal to |
-lt | Less than |
-le | Less than or equal to |
-gt | Greater than |
-ge | Greater than or equal to |
Arithmetic | Comparison within double parentheses (( … ))\ |
> | Greater than |
>= | Greater than or equal to |
< | Less than |
<= | Less than or equal to |
File tests
Operator | Tests Whether | Operator | Tests Whether |
---|---|---|---|
-e | File exists | -s | File is not zero size |
-f | File is a regular file | ||
-d | File is a directory | -r | File has read permission |
-h | File is a symbolic link | -w | File has write permission |
-L | File is a symbolic link | -x | File has execute permission |
-b | File is a block device | ||
-c | File is a character device | -g | sgid flag set |
-p | File is a pipe | -u | suid flag set\ |
-S | File is a socket | -k | “sticky bit” set |
-t | File is associated with a terminal | ||
-N | File modified since it was last read | F1 -nt F2 | File F1 is newer than F2 |
-O | You own the file | F1 -ot F2 | File F1 is older than F2 |
-G | Group id of file same as yours | F1 -ef F2 | Files F1 and F2 are hard links to the same file |
! “NOT” (reverses sense of above tests)
Exercises
Write a script that reads the first two arguments from the command line, a filename and a number. If the file exists and the number is negative, change the permissions on the file to read-only (r--
). If the file doesn’t exist or if the number is greater than 50, then create the file and change it’s permissions to rwx
.
vi file_num.sh
#!/bin/bash
file=$1
value=$2
negcutoff=0
poscutoff=50
if [ -r $file ]
then
if [ $value -lt $negcutoff ]
then
chmod 400 $file
elif [ $value -gt $poscutoff ]
then
chmod 700 $file
fi
else
touch $file
chmod 700 $file
fi
prompt> ./file_num.sh fake.txt 70; ls -l fake.txt ;
0 -rwx------ 1 beckbw staff 0 Jul 16 18:59 fake.txt
Prev LOOPS | Next WHILE LOOPS | UP : BASH scripting | Top : Course Overview © 2017 Texas Advanced Computing Center