Bird
Raised Fist0
Bash Scriptingscripting~20 mins

File test operators (-f, -d, -e, -r, -w, -x) in Bash Scripting - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
File Test Operator Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
What is the output of this script?
Consider a file named example.txt that exists and is readable but not executable. What will this script print?
Bash Scripting
if [ -r example.txt ] && [ ! -x example.txt ]; then
  echo "Readable but not executable"
else
  echo "Other"
fi
AReadable but not executable
BOther
CSyntax error
DNo output
Attempts:
2 left
💡 Hint
Think about what -r and -x check for in a file.
💻 Command Output
intermediate
2:00remaining
What does this script output if mydir is a directory?
Given mydir is a directory, what will this script print?
Bash Scripting
if [ -d mydir ]; then
  echo "Directory exists"
else
  echo "Not a directory"
fi
ANot a directory
BNo output
CSyntax error
DDirectory exists
Attempts:
2 left
💡 Hint
The -d operator checks if the path is a directory.
💻 Command Output
advanced
2:00remaining
What error does this script produce?
What error will this script produce when run?
Bash Scripting
if [ -f ]; then
  echo "File exists"
fi
AFile exists
Bbash: [: -f: unary operator expected
CNo output
DSyntax error: unexpected token
Attempts:
2 left
💡 Hint
Check if the -f operator requires an argument.
💻 Command Output
advanced
2:00remaining
What is the output of this script if script.sh is executable and writable?
Given script.sh is executable and writable, what will this script print?
Bash Scripting
if [ -x script.sh ] && [ -w script.sh ]; then
  echo "Executable and writable"
else
  echo "Other"
fi
AExecutable and writable
BOther
CNo output
DSyntax error
Attempts:
2 left
💡 Hint
Remember what -x and -w check for.
💻 Command Output
expert
2:00remaining
What is the value of variable result after running this script?
Assuming file.txt exists and is readable but not writable, what is the value of result after this script runs?
Bash Scripting
if [ -e file.txt ]; then
  if [ -r file.txt ] && [ ! -w file.txt ]; then
    result="read-only"
  else
    result="other"
  fi
else
  result="missing"
fi
Amissing
Bother
Cread-only
DSyntax error
Attempts:
2 left
💡 Hint
Check the file existence and permissions carefully.

Practice

(1/5)
1. Which file test operator checks if a path is a regular file in a bash script?
easy
A. -e
B. -f
C. -d
D. -x

Solution

  1. Step 1: Understand the meaning of each operator

    -f checks if the path is a regular file, -d checks for directory, -e checks if the path exists, and -x checks if the file is executable.
  2. Step 2: Match the operator to the question

    The question asks for the operator that checks if a path is a regular file, which is -f.
  3. Final Answer:

    -f -> Option B
  4. Quick Check:

    Regular file check = -f [OK]
Hint: Remember: -f means file, -d means directory [OK]
Common Mistakes:
  • Confusing -f with -d
  • Using -e which only checks existence
  • Mixing -x (executable) with file type
2. Which of the following is the correct syntax to check if a directory exists in bash?
easy
A. if [ -f /path/to/dir ]; then echo "Exists"; fi
B. if [ -x /path/to/dir ]; then echo "Exists"; fi
C. if [ -e /path/to/dir ]; then echo "Exists"; fi
D. if [ -d /path/to/dir ]; then echo "Exists"; fi

Solution

  1. Step 1: Identify the operator for directory check

    -d is used to check if a path is a directory.
  2. Step 2: Verify the syntax correctness

    The syntax if [ -d /path/to/dir ]; then ... fi is correct for checking directory existence.
  3. Final Answer:

    if [ -d /path/to/dir ]; then echo "Exists"; fi -> Option D
  4. Quick Check:

    Directory check uses -d [OK]
Hint: Use -d to check directories, not -f or -x [OK]
Common Mistakes:
  • Using -f to check directories
  • Confusing -e (exists) with directory check
  • Missing spaces inside [ ] causing syntax errors
3. What will be the output of this script if myfile.txt exists and is readable but not writable?
if [ -r myfile.txt ]; then echo "Readable"; else echo "Not readable"; fi
if [ -w myfile.txt ]; then echo "Writable"; else echo "Not writable"; fi
medium
A. Readable\nWritable
B. Not readable\nWritable
C. Readable\nNot writable
D. Not readable\nNot writable

Solution

  1. Step 1: Check readability condition

    The file exists and is readable, so [ -r myfile.txt ] is true, printing "Readable".
  2. Step 2: Check writability condition

    The file is not writable, so [ -w myfile.txt ] is false, printing "Not writable".
  3. Final Answer:

    Readable\nNot writable -> Option C
  4. Quick Check:

    Readable true, writable false = A [OK]
Hint: Check each permission separately with -r and -w [OK]
Common Mistakes:
  • Assuming writable if readable
  • Mixing up -r and -w operators
  • Ignoring else branch output
4. Identify the error in this bash snippet that checks if a file exists and is executable:
if [ -e myscript.sh -a -x ]; then echo "Executable file"; fi
medium
A. Missing filename after -x operator
B. Wrong operator -e should be -f
C. Missing spaces around -a operator
D. Should use double brackets [[ ]] instead of single [ ]

Solution

  1. Step 1: Analyze the -x operator usage

    The -x operator requires a filename argument, but none is provided after it.
  2. Step 2: Check other parts of the condition

    -e myscript.sh is valid to check existence; spaces around -a are correct; using single brackets is valid.
  3. Final Answer:

    Missing filename after -x operator -> Option A
  4. Quick Check:

    -x needs a file name [OK]
Hint: Always provide filename after each test operator [OK]
Common Mistakes:
  • Forgetting filename after -x
  • Confusing -e and -f operators
  • Missing spaces around operators causing syntax errors
5. You want to write a bash script that prints "Ready" only if config.cfg exists, is a regular file, and is readable and writable. Which condition correctly checks all these?
hard
A. if [ -f config.cfg ] && [ -r config.cfg ] && [ -w config.cfg ]; then echo "Ready"; fi
B. if [ -e config.cfg -a -r config.cfg -a -w config.cfg ]; then echo "Ready"; fi
C. if [ -d config.cfg ] && [ -r config.cfg ] && [ -w config.cfg ]; then echo "Ready"; fi
D. if [ -e config.cfg ] && [ -r config.cfg ] && [ -w config.cfg ]; then echo "Ready"; fi

Solution

  1. Step 1: Identify the operator for regular file check

    -f checks if the path is a regular file, which is required.
  2. Step 2: Combine all conditions correctly

    Using && between separate [ ] tests is correct and clear. The script checks existence as a file, readability, and writability.
  3. Step 3: Eliminate incorrect options

    if [ -e config.cfg ] && [ -r config.cfg ] && [ -w config.cfg ]; then echo "Ready"; fi uses -e which allows directories; if [ -e config.cfg -a -r config.cfg -a -w config.cfg ]; then echo "Ready"; fi uses -e which allows directories; if [ -d config.cfg ] && [ -r config.cfg ] && [ -w config.cfg ]; then echo "Ready"; fi checks for directory which is wrong.
  4. Final Answer:

    if [ -f config.cfg ] && [ -r config.cfg ] && [ -w config.cfg ]; then echo "Ready"; fi -> Option A
  5. Quick Check:

    Regular file with read/write uses -f, -r, -w combined [OK]
Hint: Use -f for file, combine tests with && for clarity [OK]
Common Mistakes:
  • Using -e instead of -f to check file type
  • Using -a inside single [ ] causing confusion
  • Checking directory instead of file
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard