展示Bash脚本中read命令的一些常见用途

303 阅读2分钟

从用户那里获取输入是任何编程语言都要做的事情。你可以在bash脚本中通过多种方式从用户那里获取输入。在bash脚本中,读取命令被用来从用户那里获取数据。通过应用read命令的不同选项,可以在bash脚本中获取单个或多个数据。本教程中展示了read命令的一些常见用途。

读取命令的选项

选项目的
-p用来在输入提示前为用户提供帮助信息。
-s它用于从用户那里获取不可见的输入。该选项用于获取密码或秘密数据。它被称为无声模式。
-t它用于设置从用户那里获取输入的等待时间,以秒为单位。
-n用来设置输入字符的限制。

例1:使用不带变量的read命令

read命令可以在没有任何变量的情况下使用。$REPLY变量用于读取无变量的read命令从用户那里获取的输入。用下面的脚本创建一个bash文件,以了解如何使用不带任何变量的read命令。

#!/bin/bash  
   
echo "What is your favorite programming language?"  
# Take input without defining variable    
read  
# Print the input value
echo "Your answer is $REPLY"

输出

在执行上述脚本后,将出现以下输出。

例2: 使用简单的read命令

用下面的脚本创建一个bash文件,以了解如何使用带有变量的read命令。运行该脚本后,程序将等待用户的输入。当用户输入数据并按下回车键时,数据将被存储在答案变量中。答案 变量的值稍后将被打印出来。

#!/bin/bash
echo -n "What is your favorite food: "
# Assign input value into a variable
read answer
# Print the value of the variable
echo "Oh! you like $answer!"

输出

在执行完上述脚本后会出现以下输出。

例3: 使用带有选项的read命令

用下面的脚本创建一个bash文件,了解如何在bash脚本中同时使用-p和-s两个选项。在这个例子中,将从用户那里获取用户名和密码,并与特定的值进行比较,以检查用户名和密码是否有效。

#!/bin/bash
# Type your Login Information
read -p 'Username: ' user
read -sp 'Password: ' pass

# Check the username and password are valid or not
if (( $user == "admin" && $pass == "12345" ))
then
    echo -e "\nSuccessful login"
else
    echo -e "\nUnsuccessful login"
fi

输出

执行上述脚本后会出现以下输出。

Example-4: 使用read命令来获取多个输入信息

通过使用带有多个变量名的read命令,可以一次获取多个输入。在下面的例子中,通过使用read命令将在四个变量中获取四个输入。

#!/bin/bash

# Taking multiple inputs
echo "Type four names of your favorite programming languages"
read lan1 lan2 lan3 lan4
echo "$lan1 is your first choice"
echo "$lan2 is your second choice"
echo "$lan3 is your third choice"
echo "$lan4 is your fourth choice"

输出

执行上述脚本后会出现以下输出。

例5:使用有时间限制的读取命令

用下面的脚本创建一个bash文件,从用户那里获取有时间限制的输入。这里,时间将以秒为单位计算。在下面的例子中,程序将等待用户的输入5秒钟,如果用户无法在5秒钟内输入数据,程序将无价值地退出。

#!/bin/bash
# Take input with time limit
read -t 5 -p "Type your favorite color : " color
# Print the input value
echo $color

输出

在执行了上述脚本之后,将出现以下输出。在第一次执行时已经给出了输入值, 而在第二次执行时, 在5秒内没有给出输入值.

例6:使用带有-n选项的read命令

用下面的脚本创建一个bash文件来获取特定长度的输入。根据该脚本,用户最多可以输入15个字符作为输入。

#!/bin/bash

echo "Enter your phone number(Maximum 15 characters):"
# Take input of a maximum 15 characters long
read -n 15 phone
# Add a newline
echo
# Print the input value
echo "Your phone number is $phone"

输出

在执行了上述脚本之后,会出现以下输出。

例7: 检查采取的路径是文件还是目录

用下面的脚本创建一个bash文件,从终端输入一个路径值,并检查输入的路径是一个目录还是文件。

#!/bin/bash

# Take the path value from the input
read -p "Enter the valid path: " path

# Check the input values is a directory or not
if [ -d $path ]; then
     echo "$path is a directory."
# Check the input values is a file or not
elif [ -f "$path" ]; then
     echo "$path is a file."
else
     echo "Invalid path."
fi

输出

执行上述脚本后会出现以下输出。

例8:使用read命令初始化数组

数组变量可以通过使用read命令来声明和初始化。用下面的脚本创建一个bash文件,了解如何通过使用read命令创建和初始化数组。接下来,数组的所有元素,数组的第一个元素,前两个元素,以及数组的最后一个元素将被打印出来。

#!/bin/bash  

echo "Enter five numeric values for the array with space:"
# Read values for the array
read -a MyArr

# Print all array values
echo  ${MyArr[@]}

# Print the first value of the array
echo  ${MyArr[0]}

# Print the first two values of the array
echo  ${MyArr[@]:0:2}

# Print the last value of the array
echo  ${MyArr[4]}

输出

执行上述脚本后会出现以下输出。

结论:

本教程通过多个例子展示了read命令的不同用途,以帮助bash用户正确认识该命令的用途,并将其应用到他们的脚本中。