Bird
Raised Fist0
Bash Scriptingscripting~20 mins

Command-line arguments ($1, $2, ...) in Bash Scripting - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Command-line Arguments 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 with arguments?
Consider the following bash script saved as args.sh. What will be the output if you run ./args.sh apple banana cherry?
Bash Scripting
#!/bin/bash

echo "First argument: $1"
echo "Second argument: $2"
echo "All arguments: $@"
A
First argument: apple
Second argument: cherry
All arguments: apple banana cherry
B
First argument: banana
Second argument: cherry
All arguments: apple banana cherry
C
First argument: apple
Second argument: banana
All arguments: apple banana cherry
D
First argument: apple
Second argument: banana
All arguments: apple
Attempts:
2 left
💡 Hint
Remember that $1 is the first argument, $2 the second, and $@ represents all arguments.
💻 Command Output
intermediate
2:00remaining
What does this script print when no arguments are given?
Given this script args_empty.sh, what is the output when run as ./args_empty.sh with no arguments?
Bash Scripting
#!/bin/bash

echo "Argument 1 is: $1"
echo "Number of arguments: $#"
A
Argument 1 is: null
Number of arguments: 0
B
Argument 1 is: $1
Number of arguments: 1
C
Argument 1 is: 
Number of arguments: 1
D
Argument 1 is: 
Number of arguments: 0
Attempts:
2 left
💡 Hint
When no arguments are passed, $1 is empty and $# is zero.
📝 Syntax
advanced
2:00remaining
Which option correctly prints the third argument?
You want to print the third command-line argument in a bash script. Which of these lines will do it correctly?
Aecho $3
Becho $[3]
Cecho ${3}
Decho $@3
Attempts:
2 left
💡 Hint
Use the positional parameter syntax for arguments.
🔧 Debug
advanced
2:00remaining
Why does this script print empty for $2?
This script is run as ./script.sh one two. Why does it print an empty line for the second argument?
Bash Scripting
#!/bin/bash

echo "Arg1: $1"
echo "Arg2: $ 2"
ABecause $2 is not set when two arguments are passed.
BBecause there is a space between $ and 2, so $ is treated as variable and 2 as text.
CBecause $ 2 is correct syntax but the second argument is empty.
DBecause the script needs quotes around $2 to print it.
Attempts:
2 left
💡 Hint
Check the spacing between $ and the number.
🚀 Application
expert
3:00remaining
How many arguments does this script count?
Given this script count_args.sh, what number will it print when run as ./count_args.sh a "b c" d?
Bash Scripting
#!/bin/bash

count=0
for arg in "$@"; do
  count=$((count + 1))
done

echo $count
A3
B4
C1
D5
Attempts:
2 left
💡 Hint
Remember that quoted arguments count as one argument.

Practice

(1/5)
1. What does $1 represent in a bash script?
easy
A. The last command-line argument passed to the script
B. The total number of arguments passed to the script
C. The name of the script file
D. The first command-line argument passed to the script

Solution

  1. Step 1: Understand command-line arguments in bash

    In bash scripts, $1 refers to the first argument given after the script name.
  2. Step 2: Differentiate from other special variables

    $# is the count of arguments, $0 is the script name, and $@ is all arguments.
  3. Final Answer:

    The first command-line argument passed to the script -> Option D
  4. Quick Check:

    $1 = first argument [OK]
Hint: Remember $1 is always the first argument after script name [OK]
Common Mistakes:
  • Confusing $1 with $# (argument count)
  • Thinking $1 is the script name
  • Mixing $1 with $0 or $@
2. Which of the following is the correct way to access the third argument in a bash script?
easy
A. $0
B. $2
C. $3
D. $#

Solution

  1. Step 1: Recall argument numbering in bash

    Arguments start from $1 for the first, so the third argument is $3.
  2. Step 2: Identify incorrect options

    $2 is second argument, $# is count, $0 is script name.
  3. Final Answer:

    $3 -> Option C
  4. Quick Check:

    Third argument = $3 [OK]
Hint: Count arguments starting at $1, so third is $3 [OK]
Common Mistakes:
  • Using $2 instead of $3 for third argument
  • Confusing $# with argument value
  • Using $0 which is script name
3. What will be the output of this script if run as ./script.sh apple banana cherry?
echo "First: $1"
echo "Second: $2"
echo "Count: $#"
medium
A. First: apple Second: banana Count: 3
B. First: apple Second: cherry Count: 3
C. First: ./script.sh Second: apple Count: 3
D. First: banana Second: cherry Count: 2

Solution

  1. Step 1: Identify argument values

    Arguments are apple ($1), banana ($2), cherry ($3). Script name is $0.
  2. Step 2: Understand output commands

    echo prints $1 as apple, $2 as banana, and $# as 3 (number of arguments).
  3. Final Answer:

    First: apple Second: banana Count: 3 -> Option A
  4. Quick Check:

    Arguments match output [OK]
Hint: Remember $1, $2 are first and second args; $# is count [OK]
Common Mistakes:
  • Mixing script name ($0) with arguments
  • Confusing argument order
  • Miscounting number of arguments
4. Given this script snippet:
echo "Argument 1: $1"
echo "Argument 2: $2"
What is the error if you run the script without any arguments?
medium
A. Script prints empty lines for $1 and $2
B. No output is printed
C. Script throws a syntax error
D. Script prints the script name instead of arguments

Solution

  1. Step 1: Understand missing arguments behavior

    If no arguments are passed, $1 and $2 are empty strings, not errors.
  2. Step 2: Check script output

    echo prints "Argument 1: " and "Argument 2: " with nothing after colon.
  3. Final Answer:

    Script prints empty lines for $1 and $2 -> Option A
  4. Quick Check:

    Missing args = empty $1, $2 [OK]
Hint: No args means $1, $2 are empty, no errors [OK]
Common Mistakes:
  • Expecting syntax or runtime error
  • Thinking script name prints as argument
  • Assuming no output at all
5. You want a bash script to print all arguments passed to it, each on a new line, using only $1, $2, etc. Which approach works best?
hard
A. Use a loop with a counter and access arguments by $1, $2, ... until counter > $#
B. Use shift command in a loop to access each argument and print it
C. Use $0 to print all arguments one by one
D. Use echo $@ to print all arguments on one line

Solution

  1. Step 1: Understand how to access all arguments one by one

    Using shift moves arguments left, so $1 becomes next argument each time.
  2. Step 2: Compare options

    Use a loop with a counter and access arguments by $1, $2, ... until counter > $# is complex and error-prone; Use echo $@ to print all arguments on one line prints all on one line; Use $0 to print all arguments one by one prints script name; Use shift command in a loop to access each argument and print it correctly loops and prints each argument on new line.
  3. Final Answer:

    Use shift command in a loop to access each argument and print it -> Option B
  4. Quick Check:

    Shift loops through args one by one [OK]
Hint: Use shift in loop to print each argument separately [OK]
Common Mistakes:
  • Using $0 instead of arguments
  • Trying to manually count without shift
  • Printing all args on one line instead of separate lines
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