Here are some shell special variables:
Special Shell Variables:
| Variable | Meaning |
|---|---|
| $0 | Filename of script |
| $1 | Positional parameter #1 |
| $2 - $9 | Positional parameters #2 - #9 |
| ${10} | Positional parameter #10 |
| $# | Number of positional parameters |
| "$*" | All the positional parameters (as a single word) * |
| "$@" | All the positional parameters (as separate strings) |
| ${#*} | Number of positional parameters |
| ${#@} | Number of positional parameters |
| $? | Return value |
| $$ | Process ID (PID) of script |
| $- | Flags passed to script (using set) |
| $_ | Last argument of previous command |
| $! | Process ID (PID) of last job run in background |
TEST Operators: Files
| 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 (inverts sense of above tests) |
* Binary operator (requires two operands).