Bird
Raised Fist0
Bash Scriptingscripting~5 mins

Silent input with read -s (passwords) in Bash Scripting

Choose your learning style10 modes available
Introduction
Sometimes you need to ask for a password or secret without showing it on the screen. Silent input hides what you type.
When asking a user to enter a password in a script.
When collecting sensitive information like PINs or secret keys.
When you want to keep input private on shared or public computers.
Syntax
Bash Scripting
read -s variable_name
The -s option makes the input silent (no characters shown).
You can add -p to show a prompt message before input, like: read -s -p "Enter password: " password
Examples
Reads input silently and stores it in the variable 'password'. No prompt shown.
Bash Scripting
read -s password
Shows a prompt, reads password silently, then confirms input received.
Bash Scripting
read -s -p "Enter your password: " password

echo "Password received."
Sample Program
This script asks for a password silently, then prints how many characters were typed without showing the password itself.
Bash Scripting
#!/bin/bash

read -s -p "Enter your password: " password

echo
 echo "You entered a password with length: ${#password}"
OutputSuccess
Important Notes
After silent input, use echo to print a newline because the prompt stays on the same line.
Silent input does not show any characters, not even stars (*).
Be careful when using silent input in scripts that log commands or outputs.
Summary
Use 'read -s' to hide user input for passwords or secrets.
Add '-p' to show a prompt message before input.
Silent input keeps sensitive data private on screen.

Practice

(1/5)
1. What does the -s option do when used with the read command in bash scripting?
easy
A. It hides the user input on the terminal (silent input).
B. It shows the input characters in uppercase.
C. It saves the input to a file automatically.
D. It pauses the script until a key is pressed.

Solution

  1. Step 1: Understand the purpose of read -s

    The -s option in read hides the input typed by the user, making it silent on the terminal.
  2. Step 2: Compare with other options

    Other options do not hide input; -s is specifically for silent input, useful for passwords.
  3. Final Answer:

    It hides the user input on the terminal (silent input). -> Option A
  4. Quick Check:

    read -s = silent input [OK]
Hint: Remember: -s means silent input, no characters shown [OK]
Common Mistakes:
  • Thinking -s shows input in uppercase
  • Confusing -s with saving input to file
  • Assuming -s pauses the script
2. Which of the following is the correct syntax to silently read a password with a prompt in bash?
easy
A. read -p "Enter password:" password -s
B. read password -p -s "Enter password:"
C. read -s -p "Enter password:" password
D. read password -s -p "Enter password:"

Solution

  1. Step 1: Recall correct option order for read

    The options -s and -p must come before the variable name.
  2. Step 2: Check each option's position

    read -s -p "Enter password:" password correctly places -s and -p before the variable password.
  3. Final Answer:

    read -s -p "Enter password:" password -> Option C
  4. Quick Check:

    Options before variable = correct syntax [OK]
Hint: Options (-s, -p) always come before variable name [OK]
Common Mistakes:
  • Placing options after variable name
  • Mixing order of -s and -p incorrectly
  • Using -p without quotes for prompt
3. What will be the output of this script snippet?
read -s -p "Enter secret: " secret

echo "You entered: $secret"
medium
A. The prompt appears, input is visible, then prints 'You entered: [input]'.
B. The prompt does not appear, input is visible, then prints 'You entered: [input]'.
C. The script throws a syntax error.
D. The prompt 'Enter secret: ' appears, input is hidden, then prints 'You entered: [input]'.

Solution

  1. Step 1: Analyze the read -s -p behavior

    The prompt string is shown, but the input typed is hidden (silent).
  2. Step 2: Understand the echo output

    After input, the script prints the entered value with the message.
  3. Final Answer:

    The prompt 'Enter secret: ' appears, input is hidden, then prints 'You entered: [input]'. -> Option D
  4. Quick Check:

    read -s -p shows prompt, hides input [OK]
Hint: Prompt shows, input hidden, echo prints input [OK]
Common Mistakes:
  • Assuming input is visible with -s
  • Thinking prompt won't show
  • Expecting syntax error
4. Identify the error in this script snippet:
read -p "Enter password:" password -s
echo "Password is $password"
medium
A. The prompt string is missing quotes.
B. The -s option is placed after the variable name.
C. The variable name should be before options.
D. There is no error; the script works fine.

Solution

  1. Step 1: Check option placement in read

    Options like -s must come before the variable name; here it is after.
  2. Step 2: Understand the consequences

    Placing -s after the variable name treats it as another variable name instead of an option, so input is not hidden.
  3. Final Answer:

    The -s option is placed after the variable name. -> Option B
  4. Quick Check:

    Options after variable = treated as names [OK]
Hint: Put all options before variable name to avoid errors [OK]
Common Mistakes:
  • Placing options after variable name
  • Assuming the script hides input correctly
  • Assuming prompt needs no quotes
5. You want to create a bash script that asks the user for a password silently, then confirms the password by asking again silently. Which script snippet correctly implements this?
hard
A. read -s -p "Enter password: " pass read -s -p "Confirm password: " pass2 if [[ "$pass" == "$pass2" ]]; then echo "Passwords match"; else echo "Mismatch"; fi
B. read -p "Enter password: " -s pass read -p "Confirm password: " -s pass2 if [ $pass = $pass2 ]; then echo "Passwords match"; else echo "Mismatch"; fi
C. read -s pass "Enter password: " read -s pass2 "Confirm password: " if [[ $pass == $pass2 ]]; then echo "Passwords match"; else echo "Mismatch"; fi
D. read pass -s -p "Enter password: " read pass2 -s -p "Confirm password: " if [[ "$pass" = "$pass2" ]]; then echo "Passwords match"; else echo "Mismatch"; fi

Solution

  1. Step 1: Verify correct syntax for silent input with prompt

    The read -s -p "Enter password: " pass read -s -p "Confirm password: " pass2 if [[ "$pass" == "$pass2" ]]; then echo "Passwords match"; else echo "Mismatch"; fi uses read -s -p "prompt" variable correctly for both inputs.
  2. Step 2: Check password comparison syntax

    The read -s -p "Enter password: " pass read -s -p "Confirm password: " pass2 if [[ "$pass" == "$pass2" ]]; then echo "Passwords match"; else echo "Mismatch"; fi uses double brackets and quotes around variables, which is safe and correct for string comparison.
  3. Final Answer:

    read -s -p "Enter password: " pass read -s -p "Confirm password: " pass2 if [[ "$pass" == "$pass2" ]]; then echo "Passwords match"; else echo "Mismatch"; fi -> Option A
  4. Quick Check:

    Correct option order and safe comparison = read -s -p "Enter password: " pass read -s -p "Confirm password: " pass2 if [[ "$pass" == "$pass2" ]]; then echo "Passwords match"; else echo "Mismatch"; fi [OK]
Hint: Use read -s -p and double brackets with quotes for comparison [OK]
Common Mistakes:
  • Placing options after variable name
  • Using single brackets without quotes for strings
  • Incorrect order of arguments in read
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