Shell输入详解

发布时间:2023-05-18

Shell输入详解

Shell是一种脚本语言,通常用于自动化执行任务和处理文件。对于一个开发者来说,熟练掌握Shell输入是非常必要的。在本篇文章中,我们将从多个方面探讨Shell输入的相关内容。

一、Shell输入回车默认值

当我们在Shell中输入注册用户的性别时,我们希望只允许输入“男”或“女”,如果用户输入其他值,那么程序会要求用户重新输入。在这种情况下,我们可以设置默认值,让用户输入回车,则会使用默认值。下面是示例代码:

read -p "请输入你的性别(默认为男):" sex
sex=${sex:-男}
echo "你的性别是$sex"

上述代码中,使用了read命令向用户请求输入,并使用了-p选项指定了提示信息。如果用户输入回车,则使用默认值“男”;否则,使用用户输入的值。运行以上代码,示例如下:

请输入你的性别(默认为男):
你的性别是男

二、Shell判断输入

在Shell中,我们经常需要判断用户输入是否符合我们的要求。在下面的示例中,我们用到了if语句对用户输入的值进行判断。

read -p "请输入你的年龄:" age
if [ $age -le 18 ];then
  echo "你还未成年"
else
  echo "你已成年"
fi

在上述代码中,我们使用了read命令向用户请求输入,然后使用if语句判断用户输入的年龄是否小于等于18。如果是,则输出“你还未成年”,否则输出“你已成年”。示例输出如下:

请输入你的年龄:20
你已成年

三、Shell输入命令

在Shell中,我们可以使用read命令获取用户输入的命令,并使用eval命令来执行该命令。下面是示例代码:

read -p "请输入一个命令:" cmd
eval $cmd

在上述代码中,我们使用了read命令请求用户输入命令,并使用eval命令来执行该命令。示例输出如下:

请输入一个命令:ls -l
总用量 24
drwxr-xr-x 1 root root 12288 7月  30 07:24 bin
drwxr-xr-x 3 root root  4096 8月    7 07:37 lib
drwxr-xr-x 2 root root  4096 7月  30 07:24 sbin
drwxr-xr-x 2 root root  4096 7月  30 07:24 src

四、Shell输入一组数据求最大值

在Shell中,我们可以使用循环语句和判断语句来求一组数据的最大值。下面是示例代码:

read -p "请输入数据(以空格分隔):" data
max=0
for i in $data
do
  if [ $i -gt $max ];then
    max=$i
  fi
done
echo "数据中的最大值为:$max"

在上述代码中,我们使用了read命令请求用户输入一组数据,并使用循环语句和判断语句来求得这组数据的最大值。示例输出如下:

请输入数据(以空格分隔):5 9 3 7 2
数据中的最大值为:9

五、Shell输入参数

在Shell中,我们可以使用$0$1$2等变量获取脚本或函数的参数。下面是示例代码:

#!/bin/bash
echo "脚本名称:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"

在上述代码中,我们使用了$0$1$2等变量来获取脚本或函数的参数,并使用echo命令输出这些变量的值。示例输出如下:

$ ./test.sh arg1 arg2
脚本名称:./test.sh
第一个参数:arg1
第二个参数:arg2

六、Shell输入名字年份

在Shell中,我们可以使用read命令请求用户输入名字和年份,并使用echo命令输出拼接后的字符串。下面是示例代码:

read -p "请输入你的名字:" name
read -p "请输入你的出生年份:" year
age=`expr $(date +%Y) - $year`
echo "你好,$name,你今年${age}岁了"

在上述代码中,我们使用了read命令请求用户输入名字和年份,并使用expr命令计算出用户的年龄,并使用echo命令输出拼接后的字符串。示例输出如下:

请输入你的名字:张三
请输入你的出生年份:1990
你好,张三,你今年31岁了

七、Shell输入一个数字

在Shell中,我们可以使用read命令请求用户输入一个数字,并使用正则表达式判断用户输入是否为数字。下面是示例代码:

while true
do
  read -p "请输入一个数字:" num
  if [[ $num =~ ^[0-9]+$ ]]; then
    echo "$num 是一个数字"
    break
  else
    echo "输入有误,请重新输入"
  fi
done

在上述代码中,我们使用了while循环语句,在循环体内使用read命令请求用户输入数字。然后使用正则表达式判断用户的输入是否为数字。如果输入正确,则输出“xxxx是一个数字”,否则提示用户输入有误。示例输出如下:

请输入一个数字:abc
输入有误,请重新输入
请输入一个数字:123
123 是一个数字

八、Shell输入密码不显示

在Shell中,我们可以使用read命令请求用户输入密码,并使用密码模式隐藏用户的输入。下面是示例代码:

#!/bin/bash
echo -n "请输入密码:"
read -s password
echo
echo "你输入的密码是:$password"

在上述代码中,我们使用了-s选项让read命令进入密码模式,并使用echo命令输出用户的密码。在输出之前,我们使用了-n选项使echo命令不换行。示例输出如下:

请输入密码:(用户输入密码,但不可见)
你输入的密码是:(用户输入的密码)

九、Shell输入密码

在Shell中,我们可以使用read命令请求用户输入密码,并使用stty命令设置终端显示模式。下面是示例代码:

#!/bin/bash
echo -n "请输入密码:"
stty -echo
read password
stty echo
echo
echo "你输入的密码是:$password"

在上述代码中,我们使用了stty命令来设置终端的显示模式。在读取用户输入密码之前,我们使用了-echo选项来关闭终端输出,这样用户输入的密码就不会被显示出来。在读取完用户输入的密码后,我们使用了echo命令输出。示例输出如下:

请输入密码:(用户输入密码,但不可见)
你输入的密码是:(用户输入的密码)