如何检查传递给 shell 脚本的参数是不是不是整数?

     2023-02-24     269

关键词:

【中文标题】如何检查传递给 shell 脚本的参数是不是不是整数?【英文标题】:How can I check whether an argument passed to a shell script is NOT an integer?如何检查传递给 shell 脚本的参数是否不是整数? 【发布时间】:2013-03-22 15:20:11 【问题描述】:

我知道如何使用以下方法检查参数是否为整数:

if [[ $2 = *[[:digit:]]* ]]; then
    # $2 is a number
else
    # $2 is not a number
fi

但是,我需要检查参数是否不是一个整数。我该怎么做?

【问题讨论】:

【参考方案1】:

你知道很容易。你可以这样做:

   if echo $Myvar | egrep -q '^[0-9]+$'; then
      # $Myvar is a number
   else
      # $Myvar is not a number
   fi

这是我主要用于数字检查的东西。

【讨论】:

【参考方案2】:

$2 = *[[:digit:]]* 只检查$2 是否包含一个数字。

# is an integer
[[ $2 =~ ^[[:digit:]]+$ ]]
# is not an integer
[[ ! $2 =~ ^[[:digit:]]+$ ]]

【讨论】:

此命令不起作用,不断收到“意外令牌附近的语法错误”错误!事实上,唯一有效的命令是我最初使用的那个。 @user2232423 接近意外令牌什么【参考方案3】:

你的测试只检查输入是否为数字;例如 $2 is "43" 那么这将打印: 43不是数字 可以使用正则表达式修复您的解决方案以检查实际数字:

if [[ $2 =~ ^-?[[:digit:]]+$ ]]; then
    echo "$2 is a number"
fi

检查输入是否不是数字然后只是否定测试的问题:

if [[ ! $2 =~ ^-?[[:digit:]]+$ ]]; then
    echo "$2 is not a number"
fi

【讨论】:

【参考方案4】:

符合 POSIX 的方法

一种健壮且可移植(符合 POSIX;在 dash 中测试)的方法是检查 shell 是否可以将变量解析为整数,如下面的脚本所示。

#!/bin/sh

# test-int.sh
# A script that tests whether its first argument is an integer

if [ "$1" -eq 0 -o "$1" -ne 0 ] >/dev/null 2>&1; then
    printf "integer: %s\n" "$1"
else
    printf "not an integer\n"
fi

测试

$ dash test-int.sh foo
not an integer
$ dash test-int.sh 098234
integer: 098234
$ dash test-int.sh 77239asdfasf
not an integer
$ dash test-int.sh -77239
integer: -77239

请注意,这种方法也接受开箱即用的负整数,但您可以轻松地将其修改为仅接受正整数。

在我的脚本中,一个成功解析的整数被打印为一个字符串,但是,或者,您可能希望将它打印为一个整数,使用%d

【讨论】:

如何将参数(不是命令行参数)传递给批处理脚本中的函数

】如何将参数(不是命令行参数)传递给批处理脚本中的函数【英文标题】:Howtopassarguments(notcommandlinearguments)tofunctionswithinbatchscripts【发布时间】:2011-12-1405:13:52【问题描述】:我正在编写一个批处理文件,用于自动为我们销售... 查看详情

shell如何启动另外一个脚本执行,并传递参数

子shell变量传递给父shell,中间可以保存个临时文件让父shell去读。下边是一个子shell,传递给父shell的一个例子,仅做参考#!/bin/bash( subvar="hello shell" echo "$subvar" > temp.txt)read pvar <&nb... 查看详情

Windows 7批处理文件:如何检查参数是不是已传递给批处理文件

】Windows7批处理文件:如何检查参数是不是已传递给批处理文件【英文标题】:Windows7batchfiles:HowtocheckifparameterhasbeenpassedtobatchfileWindows7批处理文件:如何检查参数是否已传递给批处理文件【发布时间】:2011-08-0918:14:12【问题描述... 查看详情

检查 Bash shell 脚本中是不是存在输入参数

】检查Bashshell脚本中是不是存在输入参数【英文标题】:CheckexistenceofinputargumentinaBashshellscript检查Bashshell脚本中是否存在输入参数【发布时间】:2011-09-2220:48:51【问题描述】:我需要检查输入参数是否存在。我有以下脚本if["$1"-gt... 查看详情

将 $@ 传递给 shell 脚本中的函数

】将$@传递给shell脚本中的函数【英文标题】:Pass$@toafunctioninashellscript【发布时间】:2015-10-0918:09:49【问题描述】:问题描述在shell脚本中,我想从函数内部迭代所有命令行参数("$@")。但是,在函数内部,$@指的是函数参... 查看详情

检查传递给方法的参数是不是是类中定义的常量之一?

】检查传递给方法的参数是不是是类中定义的常量之一?【英文标题】:Checkiftheparameterspassedtoamethodisoneoftheconstantsdefinedinaclass?检查传递给方法的参数是否是类中定义的常量之一?【发布时间】:2017-12-2518:09:51【问题描述】:我... 查看详情

检查传递的参数是不是是 Bash 中的文件或目录

】检查传递的参数是不是是Bash中的文件或目录【英文标题】:CheckifpassedargumentisfileordirectoryinBash检查传递的参数是否是Bash中的文件或目录【发布时间】:2011-06-0714:16:08【问题描述】:我正在尝试在Ubuntu中编写一个非常简单的脚... 查看详情

如何检查参数在shell中是不是有单个字符

】如何检查参数在shell中是不是有单个字符【英文标题】:Howtocheckifanargumenthasasinglecharacterinshell如何检查参数在shell中是否有单个字符【发布时间】:2012-11-0903:22:14【问题描述】:我正在尝试编写一个脚本来检查参数是否有单个... 查看详情

如何在 shell 脚本中检查目录是不是存在? [复制]

】如何在shell脚本中检查目录是不是存在?[复制]【英文标题】:Howtocheckifadirectoryexist,withinashellscript?[duplicate]如何在shell脚本中检查目录是否存在?[复制]【发布时间】:2014-03-3017:50:54【问题描述】:在shell脚本中可以使用什么命... 查看详情

获取传递给 shell 脚本的最后一个参数

...-2315:52:12【问题描述】:$1是第一个参数。$@是所有参数。如何找到传递给shell的最后一个参数脚本?【问题讨论】:我使用的是bash,但解决方案越便携越好。faqs.org/faqs/unix-faq/faq/part2/section-12.html使用也可 查看详情

如何检查命令是不是存在于 shell 脚本中? [复制]

】如何检查命令是不是存在于shell脚本中?[复制]【英文标题】:HowcanIcheckifacommandexistsinashellscript?[duplicate]如何检查命令是否存在于shell脚本中?[复制]【发布时间】:2011-11-2306:37:19【问题描述】:我正在编写我的第一个shell脚本... 查看详情

检查传递给方法的对象是不是为“this”

】检查传递给方法的对象是不是为“this”【英文标题】:Checkingiftheobjectpassedtoamethodis"this"检查传递给方法的对象是否为“this”【发布时间】:2016-01-0715:25:43【问题描述】:我正在尝试解决以下问题:假设我正在编写一个... 查看详情

Argparse:检查是不是传递了任何参数

】Argparse:检查是不是传递了任何参数【英文标题】:Argparse:CheckifanyargumentshavebeenpassedArgparse:检查是否传递了任何参数【发布时间】:2012-05-2817:36:35【问题描述】:当没有给出参数时,我的脚本应该启动演示模式。我试过这个... 查看详情

Spring MVC - 如何检查是不是没有传递意外的查询字符串参数?

】SpringMVC-如何检查是不是没有传递意外的查询字符串参数?【英文标题】:SpringMVC-Howtocheckthatnounexpectedquerystringparametershasbeenpassed?SpringMVC-如何检查是否没有传递意外的查询字符串参数?【发布时间】:2012-04-1802:31:45【问题描述... 查看详情

如何使用 shell 脚本检查 MySQL 数据库中是不是存在表?

】如何使用shell脚本检查MySQL数据库中是不是存在表?【英文标题】:HowtocheckifatableexistsinaMySQLdatabaseusingshellscript?如何使用shell脚本检查MySQL数据库中是否存在表?【发布时间】:2017-12-0810:13:31【问题描述】:我正在尝试使用shell... 查看详情

如何将 shell 脚本中的结果传递给 Job 中的变量

】如何将shell脚本中的结果传递给Job中的变量【英文标题】:howcanIpasstheresultinashellscripttoavariableinJob【发布时间】:2021-09-0105:00:06【问题描述】:现在我有一个使用shell脚本来处理一些数据的pentaho工作。但我发现如果我想在脚本... 查看详情

如何检查 Linux shell 脚本是不是由 cronjob 执行?

】如何检查Linuxshell脚本是不是由cronjob执行?【英文标题】:How-tocheckifLinuxshellscriptisexecutedbyacronjob?如何检查Linuxshell脚本是否由cronjob执行?【发布时间】:2016-01-2602:10:14【问题描述】:是否可以识别Linuxshell脚本是由用户执行还... 查看详情

如何给shell脚本传参数

方法/步骤执行“nanotest.sh”创建一个新的shell脚本。脚本test.sh的内容如下:#!/bin/shname=$1echo"the$namearegreatman!"给新创建的test.sh的脚本赋可执行权限,命令为“chmod755test.sh”。执行\'./test.sh"xiaowang"\'命令,可以看到自己编写脚本的结... 查看详情