linux - 检测参数的数量和传递给 bash 的值

标签 linux bash shell

我想确保我的 bash 脚本可以正确检测用户的输入参数。具体来说,用户只能将 1 或 2 或 3 传递到脚本中,否则脚本将终止。我写了下面的代码:

#!/bin/bash

for args in $@
do
    echo $args
done

if [ "$#" != 1 ] && [ "$#" -ne 1 ]; then
        echo "Illegal number of parameters"
        exit 1
fi

这个脚本只能在用户没有输入的情况下进行捕获,但不能检查用户是否确实输入了数字 1 而不是其他值。

顺便说一句,我不确定如何表达“输入参数可以接受数字 1 或 2 或 3”。

最佳答案

$# 是一个整数,所以你必须使用整数比较。例如,您可以说:

if [ "$#" -ne 1 ]; then
   echo "illegal number of parameters"
   exit 1
fi

要检查参数是 1、2 还是 3,您可以使用此正则表达式(参见 something related):

if [[ ! $1 =~ ^(1|2|3)$ ]]; then
    echo "the number is not 1, 2 or 3"
    exit 1
fi

为了表达“输入参数可以接受数字 1、2 或 3”,我会说“我们可以只接受参数为 1、2 或 3”。

关于linux - 检测参数的数量和传递给 bash 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30098998/

相关文章:

linux - 网络摄像机 : open source software for recording H. 264

linux - 使用类似 Qt Creator 的环境运行脚本

linux - 通过 SSH 仅 Gzip 包含 "*foo*"的文件

bash - 如何打印包含两个匹配两种不同模式的文件的目录?

linux - 使用 shell 遍历文件

ruby - 处理文件列表以格式化 web 文件名(简单)

linux - 跟踪特定的 IP 和端口

regex - 为什么 BASH_REMATCH 不适用于引用的正则表达式?

bash - 等待进程完成,或用户输入

linux - 如何在类 Linux 操作系统上自动执行安装过程?