what does -x mean in if conditional statement?
From the man bash
pages (especially the CONDITIONAL EXPRESSIONS section):
-a file
True if file exists.
-b file
True if file exists and is a block special file.
-c file
True if file exists and is a character special file.
-d file
True if file exists and is a directory.
-e file
True if file exists.
-f file
True if file exists and is a regular file.
-g file
True if file exists and is set-group-id.
-h file
True if file exists and is a symbolic link.
-k file
True if file exists and its ``sticky'' bit is set.
-p file
True if file exists and is a named pipe (FIFO).
-r file
True if file exists and is readable.
-s file
True if file exists and has a size greater than zero.
-t fd True if file descriptor fd is open and refers to a terminal.
-u file
True if file exists and its set-user-id bit is set.
-w file
True if file exists and is writable.
-x file
True if file exists and is executable.
[...]
if
itself is a shell keyword, so you can find information about it with help if
. if
itself only branches based on whether the next command returns true ( 0 ) or false ( not zero ). What you really want though, is man [
or man test
, where [
is an alias for test
. That statement is actually executing test -x /etc/rc.local
, which tests to see if that file exists and is executable (or has search permission).
From info test
:
`-x FILE'
True if FILE exists and execute permission is granted (or search permission, if it is a directory).
Execute permission is needed on a directory to be able to cd into it (that is, to make some directory your current working directory).
Execute is needed on a directory to access the "inode" information of the files within. You need this to search a directory to read the inodes of the files within. For this reason the execute permission on a directory is often called search permission instead.