博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
检查Bash Shell脚本中输入参数的存在
阅读量:2288 次
发布时间:2019-05-09

本文共 2037 字,大约阅读时间需要 6 分钟。

我需要检查输入参数的存在。 我有以下脚本

if [ "$1" -gt "-1" ]  then echo hifi

我懂了

[: : integer expression expected

如何首先检查输入参数1是否存在?


#1楼

检测参数是否传递给脚本的另一种方法:

((!$#)) && echo No arguments supplied!

注意(( expr ))使表达式根据规则求值。

为了在没有任何参数的情况下退出,可以说:

((!$#)) && echo No arguments supplied! && exit 1

上面的另一种(类似)表达方式是:

let $# || echo No arguments suppliedlet $# || { echo No arguments supplied; exit 1; }  # Exit if no arguments!

help let说:

let: let arg [arg ...]

Evaluate arithmetic expressions. ... Exit Status: If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise.

#2楼

尝试:

#!/bin/bash if [ "$#" -eq  "0" ]   then     echo "No arguments supplied" else     echo "Hello world" fi

#3楼

提醒一下,Bash中的数字测试运算符仅适用于整数( -eq-lt-ge等)

我想确保我的$ vars是整数

var=$(( var + 0 ))

在测试它们之前,只是为了防止出现[[:必需的整数arg]错误。


#4楼

最好以这种方式进行演示

if [[ $# -eq 0 ]] ; then    echo 'some message'    exit 1fi

如果参数太少,通常需要退出。


#5楼

在某些情况下,您需要检查用户是否向脚本传递了参数,如果没有,则返回默认值。 就像下面的脚本一样:

scale=${2:-1}emulator @$1 -scale $scale

在这里,如果用户尚未将scale作为第二个参数传递,则默认情况下,我使用-scale 1启动Android模拟器。 ${varname:-word}是扩展运算符。 还有其他扩展运算符:

  • ${varname:=word} 设置未定义的varname而不返回word值;
  • ${varname:?message} ,如果已定义,则返回varname ,但不为null;或者打印message并中止脚本(如第一个示例);
  • ${varname:+word}仅在定义了varname且不为null时返回word ; 否则返回null。

#6楼

如果要检查参数是否存在,可以检查参数#是否大于或等于目标参数编号。

以下脚本演示了它是如何工作的

test.sh

#!/usr/bin/env bashif [ $# -ge 3 ]then  echo script has at least 3 argumentsfi

产生以下输出

$ ./test.sh~$ ./test.sh 1~$ ./test.sh 1 2~$ ./test.sh 1 2 3script has at least 3 arguments$ ./test.sh 1 2 3 4script has at least 3 arguments

#7楼

我经常将此代码段用于简单的脚本:

#!/bin/bashif [ -z "$1" ]; then    echo -e "\nPlease call '$0 
' to run this command!\n" exit 1fi

#8楼

只是因为有更多要指出的要点,我要补充一点,您可以简单地测试您的字符串是否为空:

if [ "$1" ]; then  echo yeselse  echo nofi

同样,如果您期望arg计数,只需测试您的最后一个:

if [ "$3" ]; then  echo has args correct or notelse  echo fixmefi

等等与任何arg或var


#9楼

它是:

if [ $# -eq 0 ]  then    echo "No arguments supplied"fi

$#变量将告诉您脚本传递的输入参数的数量。

或者您可以检查参数是否为空字符串,例如:

if [ -z "$1" ]  then    echo "No argument supplied"fi

-z开关将测试“ $ 1”的扩展名是否为空字符串。 如果为空字符串,则执行主体。

转载地址:http://jtdnb.baihongyu.com/

你可能感兴趣的文章
18级大数据专家,漫谈大数据平台安全风险与建设,值得学(下篇)
查看>>
阿里P8终于整理出:Nginx+jvm+MySQL+Docker+Spring实战技术文档
查看>>
腾讯T4专家精心整理:大数据+机器学习+数据挖掘+算法大集结
查看>>
阿里P8终于总结出:SpringBoot+Tomcat+Nginx+Netty面试题及答案
查看>>
阿里P7大牛,深入剖析JVM底层设计原理+高级特性pdf,附46页ppt
查看>>
史上最全141道大数据面试题:Redis+Linux+kafka+Hadoop,附答案
查看>>
一文带你深入理解JVM,看完之后你还敢说你懂JVM吗?颠覆you认知
查看>>
这些大厂面试真题你能答出来,年薪至少30-50W,想不想挑战一下?
查看>>
携程T7用637页PDF,解读十余热门技术领域,八场携程技术沙龙干货
查看>>
开发框架SpringBoot:构建SpringBoot工程+配置文件详解+Actuator
查看>>
6年拉力工作经验,学了阿里P8级架构师的7+1+1落地项目,跳槽阿里年薪直接40W+
查看>>
90天吃透阿里P8推荐的625页Java编程兵书技术实战,直接入职阿里定级P6
查看>>
清华毕业扫地僧,用157集终于把java给讲完了,总计3.13GB
查看>>
清华毕业大佬用了一个项目就把SpringMVC+Spring+MyBatis给讲完了
查看>>
终于学完阿里P8架构师多年实战经验总结分享微服务之道实战文档
查看>>
年薪120W的架构师简历你见过吗?java程序员该如何达到?
查看>>
超赞!80W美团架构师7年心血终成轻量级框架SSM整合开发实战文档
查看>>
超赞!终于学完了阿里P8架构师7年心血整理总结的微服务实战文档
查看>>
真666!阿里资深架构师熬夜纯手写的238页微服务容器化开发实战笔记
查看>>
Mygod!阿里P8架构师20年经验总结成微服务设计企业架构转型之道笔记
查看>>