Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

what does -x mean here:

if [ -x /etc/rc.local ] then

How could I find out this manual page for if?

share|improve this question
4  
tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html This is page explaining the basics for the bash if. –  Christophe De Troyer Apr 9 at 13:32
2  
It evaluates to true if file exists and is executable. –  i08in Apr 9 at 13:33
    
Did you try help if? –  Avinash Raj Apr 9 at 13:36
    
@Jobin Thanks, your explanation light me up ^^ –  taymindis Woon Apr 9 at 13:40

3 Answers 3

up vote 13 down vote accepted

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.

   [...]
share|improve this answer
3  
It should be noted, executable for a directory means it can be traversed. –  rich remer Apr 9 at 17:37
2  
@StevenPenny The second part of the question was "How could I find out this manual page for if?" –  Sparhawk Apr 10 at 4:32
    
Actually, you want man test, since the question asked about the single open bracket, [. The double open bracket [[ is the bash built-in that you referenced in your answer. –  drewbenn Apr 10 at 5:16
1  
@drewbenn When you invoke test in bash, you are not invoking the test binary. You are, instead, invoking bash's test builtin, which has documentation at help test, among other places. man test may be misleading in some cases for that reason. –  Chris Down Apr 10 at 6:08

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).

share|improve this answer
1  
man [ works too. –  Sparhawk Apr 9 at 14:21
1  
It not only tests to see if it exists, it tests whether the file is executable as well. –  Tom Fenech Apr 9 at 17:18
    
@TomFenech, ahh, right... –  psusi Apr 9 at 22:21
    
@psusi if is not shell builtin it's shell keyword.Run this command type if to check for that. –  Avinash Raj Apr 10 at 3:20

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.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.