相关疑难解决方法(0)

双方括号[[]]比Bash中的单方括号[]更好吗?

最近在一次代码审查中,一位同事声称该[[ ]]构造比[ ]在类似的构造中更受欢迎

if [ "`id -nu`" = "$someuser" ] ; then 
     echo "I love you madly, $someuser"
fi
Run Code Online (Sandbox Code Playgroud)

他无法提供理由.有吗?

syntax bash if-statement

514
推荐指数
8
解决办法
20万
查看次数

从Bash函数返回一个布尔值

我想编写一个bash函数来检查文件是否具有某些属性并返回true或false.然后我可以在我的脚本中使用它"if".但是我该怎么回事呢?

function myfun(){ ... return 0; else return 1; fi;}
Run Code Online (Sandbox Code Playgroud)

然后我像这样使用它:

if myfun filename.txt; then ...
Run Code Online (Sandbox Code Playgroud)

当然这不起作用.如何实现这一目标?

bash shell boolean

186
推荐指数
8
解决办法
18万
查看次数

在Bash中测试非零长度字符串:[ - n"$ var"]或["$ var"]

我已经看到bash脚本以两种不同的方式测试非零长度字符串.大多数脚本使用-n选项:

#!/bin/bash
# With the -n option
if [ -n "$var" ]; then
  # Do something when var is non-zero length
fi
Run Code Online (Sandbox Code Playgroud)

但是-n选项并不是真正需要的:

# Without the -n option
if [ "$var" ]; then
  # Do something when var is non-zero length
fi
Run Code Online (Sandbox Code Playgroud)

哪种方式更好?

同样,这是测试零长度的更好方法:

if [ -z "$var" ]; then
  # Do something when var is zero-length
fi
Run Code Online (Sandbox Code Playgroud)

要么

if [ ! "$var" ]; then
  # Do something when var is zero-length
fi
Run Code Online (Sandbox Code Playgroud)

syntax bash shell if-statement

160
推荐指数
4
解决办法
12万
查看次数

如何在bash中的if块中计算布尔变量?

我已经定义了以下变量:

myVar=true
Run Code Online (Sandbox Code Playgroud)

现在我想按照以下方式运行:

if [ myVar ]
then
    echo "true"
else
    echo "false"
fi
Run Code Online (Sandbox Code Playgroud)

上面的代码确实有效,但如果我尝试设置

myVar=false
Run Code Online (Sandbox Code Playgroud)

它仍将输出真实.可能是什么问题?

编辑:我知道我可以做一些表格

if [ "$myVar" = "true" ]; then ...
Run Code Online (Sandbox Code Playgroud)

但它有点尴尬.

谢谢

bash

82
推荐指数
2
解决办法
12万
查看次数

为什么 Bash 在“if”语句中将未定义的变量视为 true?

在下面的简单示例中,如果脚本中未设置CONDITION ,则运行脚本将打印“True”。然而,人们会期望它打印“False”。这种行为的原因是什么?

# Set CONDITION by using true or false:
# CONDITION=true or false

if $CONDITION; then
    echo "True"
else
    echo "False"
fi
Run Code Online (Sandbox Code Playgroud)

bash

61
推荐指数
1
解决办法
4824
查看次数

bash:错误处理和函数

我试图在循环中调用一个函数,并在它抛出时优雅地处理和继续。

如果我省略|| handle_error它只会像人们期望的那样停止整个脚本。

如果我离开|| handle_error那里,它将foo is fine在错误发生后打印并且根本不会执行handle_error。这也是预期的行为,这就是它的工作方式。

#!/bin/bash

set -e

things=(foo bar)

function do_something {
  echo "param: $1"

  # just throw on first loop run
  # this statement is just a way to selectively throw
  # not part of a real use case scenario where the command(s)
  # may or may not throw
  if [[ $1 == "foo" ]]; then
    throw_error
  fi

  # this line should not be executed when $1 is …
Run Code Online (Sandbox Code Playgroud)

bash

5
推荐指数
1
解决办法
4382
查看次数

重构 terraform 代码时是否有一种明智的方法来更新相应的 terraform 状态?

这是一个场景 - 您开发 terraform 模块以供您的研发组织使用。它们已经被一两个微服务使用,相当于十几个 Pod。您确定了一个重构机会,例如将一些功能提取到自己的 terraform 模块中。太好了,但是现在你必须更新十几个 terraform 状态,因为这是 terraform 代码重构的代价。

经过一次这样的重构后,我发现自己花了 8 个小时来更新所有 terraform 状态。我以一种临时的方式来做这件事——使用 powershell 脚本包装各种 terraform 状态命令。如果经常这样做,一个人很快就会失去理智。

当然,我们可以说——不要重构。但这是不可能的,因为 terraform 代码是……代码。那么,有没有更好的方法呢?某种可以提供帮助的工具,不知何故?

terraform

5
推荐指数
1
解决办法
932
查看次数

如何在Bash中用布尔值编写if / else?

如何编写if then语句,以便在这些变量之间切换,例如:

if(switch){
  server_var_shortname=$server_shared_shortname
  server_var=$server_shared
  server_var_bare=$server_shared_bare
} else {
  server_var_shortname=$server_vps_shortname
  server_var=$server_vps
  server_var_bare=$server_vps_bare
}
Run Code Online (Sandbox Code Playgroud)

我不熟悉bash语法,基本上只需要布尔值上的if / else语句。还可以这样使用true / false值吗?另外我该怎么做else语句?

$switch=true;
if $switch
then
  server_var_shortname=$server_shared_shortname
  server_var=$server_shared
  server_var_bare=$server_shared_bare
fi
Run Code Online (Sandbox Code Playgroud)

bash if-statement boolean

3
推荐指数
1
解决办法
4841
查看次数

对布尔变量的操作

在这个问题中,已经展示了如何在bash中使用整齐的布尔变量.有没有办法用这些变量执行逻辑运算?例如,如何得到这个:

var1=true
var2=false
# ...do something interesting...
if ! $var1 -a $var2; then     <--- doesn't work correctly
   echo "do sth"
fi
Run Code Online (Sandbox Code Playgroud)

bash shell boolean sh

2
推荐指数
2
解决办法
7318
查看次数

詹金斯dsl中的booleanParam

我有一个像这样的詹金斯风格的脚本:

    freeStyleJob(“test”) {
        properties { githubProjectUrl(‘…’) }
        description(‘’’job description’’’.stripMargin('|'))

        logRotator{ numToKeep(100) }

        parameters {
            stringParam(’STRINGP1’, "", “STRINGP1 description”)
            stringParam('STRINGP2’, "", “StringP2 description”)
            booleanParam(‘b1’, false)
            booleanParam(‘b2’, false)
            booleanParam(‘b3’, false)
            stringParam("EMAIL_LIST", "", "Emails")
        }

        scm {
            github(‘repo’, '${STRINGP1}', 'git', ‘giturl’)
        }

        steps {
            shell '''|#!/bin/bash
                |ARGS=""
                |fi
                |if [[ ‘${b1}’ ]]; then
                |   ARGS=$ARGS" —-p b1”
                |fi
                |if [[ ‘${b2}’ ]]; then
                |   OS_ARGS=$ARGS" —-p b2”
                |fi
                |if [[ ‘${b3}’ ]]; then
                |   ARGS=$ARGS" —-p b3”
                |fi                
                |echo ${ARGS}'''.stripMargin('|')

        }

        publishers { …
Run Code Online (Sandbox Code Playgroud)

groovy jenkins

1
推荐指数
2
解决办法
5390
查看次数

Bash如果块明显不应该运行

代码:

first=true
mountpoint=" "
partlist=`df -h | grep "^/dev"` # get partition info
for i in $partlist              # loop through info
do
  if [[ ${i:0:1} = "/" ]]       # items starting with / are what I'm interested in
  then
    if [[ $first ]]             # The first instance in each pair is the device name
    then
      mountdev=$i
      mountpoint=" "
      first=false
    else                        # The second instance is the device mount point
      mountpoint=$i
      first=true
    fi
    if [[ $mountpoint != " " ]] # …
Run Code Online (Sandbox Code Playgroud)

bash conky

0
推荐指数
1
解决办法
131
查看次数

标签 统计

bash ×9

boolean ×3

if-statement ×3

shell ×3

syntax ×2

conky ×1

groovy ×1

jenkins ×1

sh ×1

terraform ×1