Bird
Raised Fist0
Bash Scriptingscripting~10 mins

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

Choose your learning style10 modes available
Concept Flow - Silent input with read -s (passwords)
Start Script
↓
Prompt user for password
↓
read -s waits silently
↓
User types password (no echo)
↓
Password stored in variable
↓
Use or display confirmation
↓
End Script
The script prompts the user silently for a password using read -s, stores it, then proceeds without showing input.
Execution Sample
Bash Scripting
echo "Enter password:"
read -s password
echo "Password received."
This script asks for a password silently, stores it in 'password', then confirms receipt.
Execution Table
StepActionUser InputVariable 'password'Output
1Display promptEnter password:
2Wait for input silentlyuser types 'secret123'
3Store input in variablesecret123secret123
4Display confirmationsecret123Password received.
5End scriptsecret123
💡 Script ends after confirmation message; password stored silently without echo.
Variable Tracker
VariableStartAfter read -sFinal
password"""secret123""secret123"
Key Moments - 3 Insights
Why doesn't the password show on the screen when typed?
Because 'read -s' reads input silently without echoing characters, as shown in execution_table step 2.
How do we know the password was stored correctly?
The variable_tracker shows 'password' changes from empty to the typed value after step 2, confirming storage.
What happens if the user presses Enter without typing anything?
The variable 'password' will be empty, but the script still proceeds as shown in execution_table step 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of 'password' after step 3?
A"" (empty)
B"secret123"
C"Enter password:"
DNot set yet
💡 Hint
Check the 'Variable password' column in row for step 3.
At which step does the script stop showing typed characters on screen?
AStep 3
BStep 1
CStep 2
DStep 4
💡 Hint
Look at the 'Action' and 'User Input' columns in execution_table step 2.
If we remove '-s' from read, what changes in the execution table?
AUser input would be visible on screen during typing
BPassword variable would not store input
CScript would not prompt user
DNo change at all
💡 Hint
Consider the purpose of '-s' in 'read -s' shown in key_moments.
Concept Snapshot
Silent input with read -s:
Use 'read -s variable' to read input silently (no echo).
Ideal for passwords.
Input stored in variable for later use.
Echo confirmation separately.
No characters show while typing.
Full Transcript
This script uses 'read -s' to silently read a password from the user. First, it prompts the user with 'Enter password:'. Then, it waits silently for input, so typed characters do not appear on screen. The input is stored in the variable 'password'. Finally, it confirms receipt by printing 'Password received.'. The variable tracker shows the password variable changes from empty to the typed value after input. This method keeps passwords hidden during entry, improving security.

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