Home > other >  Bash script that allows one word as user input
Bash script that allows one word as user input

Time:05-25

Made a script that the user gives a "parameter" and it prints out if it is a file, directory or non of them. This is it :

    #!/bin/bash
read parametros
for filename in *
do
 if [ -f "$parametros" ];
 then
  echo "$parametros is a file"
 elif [ -d "$parametros" ];
 then
  echo "$parametros is a directory"
 else
  echo " There is not such file or directory"
 fi
 exit
done

Altough i want the user to be allowed to give only one word as a parameter. How do i make this happen ? (For example if user press space after first word there would be an error message showing "wrong input")

CodePudding user response:

You have to use the $#. It gives the number of the parameters. The code will be something like:

if [ "$#" -ne 1 ]; then
    printf 'ERROR!\n'
    exit 1
fi

CodePudding user response:

First, I'm curious why you want to restrict to one word - a file or directory could have spaces in it, but maybe you are preventing that somehow in your context.

Here are a few ways you could approach it:

  1. Validate the input after they enter it - check if it has any spaces, eg: if [[ "parametros" == *" " ]]; then...
  2. Get one character at a time in a while loop, eg with: read -n1 char
    • Show an error if it's a space
    • Break the loop if it's 'enter'
    • Build up the overall string from the entered characters

1 is obviously much simpler, but maybe 2 is worth the effort for the instant feedback that you are hoping for?

CodePudding user response:

#!/bin/bash
read parametros
if [[ "$parametros" = *[[:space:]]* ]]
then
  echo "wrong input"
elif [[ -f "$parametros" ]]
then
  echo "$parametros is a file"
elif [[ -d "$parametros" ]]
then
  echo "$parametros is a directory"
else
  echo " There is not such file or directory"
fi

See http://mywiki.wooledge.org/BashFAQ/031 for the difference between [...] and [[...]].

  • Related