当前位置: 首页 > 知识库问答 >
问题:

shell脚本中是否有“除非”?

马朝斑
2023-03-14

我尝试了与if-in-shell相反的方法,只在散列中不存在值的情况下进行操作。我从这里学会了在bash中创建哈希:Shell脚本中的关联数组

declare -A myhash

我声明了一个简单的哈希:

myhash[$key]="1"

[ ${myhash[$key]+abc} ]

从这里查看myhash[$key]是否存在:检查数组中的索引或键的最简单方法?

我还学会了添加!在一个表达式前面做相反的if从句:如何使“if not true条件”?

但是下面的表达式

if ! [ ${myhash[$key]+abc} ]; then
     echo $key

fi

不起作用,并且未打印任何信息。没有错误消息。

我试过这个:

[ ${myhash[$key]+abc} ] && echo $key

并收到错误消息:

abc: command not found

有人能告诉我怎么做吗?

共有3个答案

赵献
2023-03-14

检查数组中的索引或键的最简单方法?显示如何使用[${array[key]abc}]检查它是否存在。

如果成功,则命令成功退出,因此

您想检查它是否不存在。因此,如果 部分退出失败。因此,请使用<代码>而不是<代码>

[ ${myhash[$key]+abc} ] || echo "does not exist"

<代码>

| |:仅当第一个命令未成功时,才能执行下一个命令

戴化
2023-03-14

没有打印任何内容的原因是您在设置值后检查该值是否未设置。

以下是您正在执行的操作:

#!/bin/bash
key=foo

declare -A myhash                     # create associative array
myhash[$key]="1"                      # set the value
if ! [ ${myhash[$key]+abc} ]; then    # check if value is not set
     echo $key                        # if so, print key 
fi

现在您会问“为什么设置值时不触发未设置检查?”

如果您想检查密钥是否已设置,则不应该使用!反转存在检查。

至于<代码>[${myhash[$键]abc}]

如果您执行了${myhash[$key]abc},您就会看到这样的结果

许明朗
2023-03-14

首先,这个

[ ${myhash[$key]+abc} ]

将测试参数扩展的结果是否为空。要么存在${myhash[$key]}并扩展为字符串(其本身可能为空,也可能不为空),要么不存在并扩展为字符串“abc”。假设您没有设置myhash[$key]=“”,扩展总是生成一个非空字符串,因此命令成功。因此,![${myhash[$key]abc}]将始终失败。

假设“abc”不是myhash中的有效条目,您需要实际检查参数是否扩展为实际值,或“abc”是否为未设置的键:

if [[ ${myhash[$key]+abc} == abc ]]; then
    echo "$key does not exist in myhash"
else
    echo "myhash[$key]=${myhash[$key]}"
fi
 类似资料:
  • 本文向大家介绍什么是Shell脚本?,包括了什么是Shell脚本?的使用技巧和注意事项,需要的朋友参考一下 Shell脚本是由Unix Shell(是命令行解释器)运行的计算机程序中的命令列表。Shell脚本通常具有描述步骤的注释。Shell脚本执行的不同操作是程序执行,文件操作和文本打印。包装器也是一种Shell脚本,用于创建程序环境,运行程序等。 贝壳类型 Unix中有两种主要的Shell类型

  • 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_tut for ((i=0; i<10; i++)); do touch test_$i.txt done 示例解释 第1行:指定脚本解释器,这里是用/bin/sh做解释器的 第2行:切换到当前用户的home目录 第3行:创建一个目录shell_tut 第4行:切换到s

  • 问题内容: 我正在看这段代码。我想知道以下代码段的含义 。 在一个问题中,它说代表字符串,但这是在Perl中。这里也一样吗? 此外,我想知道该变量是否自动更新。它已被初始化为开始时,但后来如何递增? 问题答案: 检查左操作数的值是否小于或等于()右操作数的值,如果是,则条件为true。 考虑: 那是真的。

  • 本文向大家介绍Shell脚本判断Apache进程是否存在,包括了Shell脚本判断Apache进程是否存在的使用技巧和注意事项,需要的朋友参考一下 写一个脚本检查Apache进程是否存在,若不存在则显示不存在,若存在则显示进程个数,当不等于10个时用红色字体通知管理员,并询问管理员是否启动Apache服务。

  • 终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要。下面笔者就带你正式进入shell脚本的世界吧。 到现在为止,你明白什么是shell脚本吗?如果明白最好了,不明白也没有关系,相信随着学习的深入你就会越来越了解到底什么是shell脚本。首先它是一个脚本,并不能作为正式的编程语言。因为是跑在linux的s

  • bash csh ksh zsh 基本语法 定义和使用变量 #!/bin/sh a=" hello world" echo $a echo 'a is xiaxaiwen${a}' if else if ....; then   .... elif ....; then   .... else   .... fi [] 条件测试 [] 中前后一定要加空格 sh