相关疑难解决方法(0)

如何检查Bash中是否设置了变量?

我如何知道Bash中是否设置了变量?

例如,如何检查用户是否将第一个参数提供给函数?

function a {
    # if $1 is set ?
}
Run Code Online (Sandbox Code Playgroud)

variables bash shell

1417
推荐指数
23
解决办法
119万
查看次数

双方括号[[]]比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手册页,并[[说它使用条件表达式.然后我查看了Conditional Expressions部分,它列出了与test(和[)相同的运算符.

所以我想知道,Bash [[[Bash 之间的区别是什么?

bash

323
推荐指数
4
解决办法
9万
查看次数

何时在shell变量周围包装引号?

有人能告诉我是否应该在shell脚本中包含变量的引号?

例如,以下是正确的:

xdg-open $URL 
[ $? -eq 2 ]
Run Code Online (Sandbox Code Playgroud)

要么

xdg-open "$URL"
[ "$?" -eq "2" ]
Run Code Online (Sandbox Code Playgroud)

如果是这样,为什么?

unix linux bash shell quotes

145
推荐指数
4
解决办法
5万
查看次数

Dockerfile if else条件与外部参数

我有dockerfile

FROM centos:7
ENV foo=42
Run Code Online (Sandbox Code Playgroud)

然后我建立它

docker build -t my_docker .
Run Code Online (Sandbox Code Playgroud)

并运行它.

docker run -it -d  my_docker
Run Code Online (Sandbox Code Playgroud)

是否可以从命令行传递参数并在Dockerfile中使用if else?我的意思是

FROM centos:7
if (my_arg==42)
     {ENV=TRUE}
else:
     {ENV=FALSE}
Run Code Online (Sandbox Code Playgroud)

并使用此参数构建.

 docker build -t my_docker . --my_arg=42
Run Code Online (Sandbox Code Playgroud)

docker dockerfile

86
推荐指数
10
解决办法
9万
查看次数

如何检查参数是否已提供给bash脚本

我只想检查我的bash脚本中是否提供了一个参数.

我发现了这一点,但所有解决方案似乎都不必要地复杂化了.

对于这个对初学者有意义的简单问题,有什么简单的解决方案?

bash

64
推荐指数
3
解决办法
7万
查看次数

对BASH脚本中的-n选项进行测试始终返回true

我正在编写一个bash脚本,我正在尝试检查是否提供了特定的参数.我注意到一个奇怪的(至少对我而言)[ -n arg ]测试行为.对于以下脚本:

#!/bin/bash

if [ -n $1 ]; then
    echo "The 1st argument is of NON ZERO length"
fi

if [ -z $1 ]; then
    echo "The 1st argument is of ZERO length"
fi
Run Code Online (Sandbox Code Playgroud)

我得到的结果如下:

  1. 没有参数:

    xylodev@ubuntu:~$ ./my-bash-script.sh
    The 1st argument is of NON ZERO length
    The 1st argument is of ZERO length
    
    Run Code Online (Sandbox Code Playgroud)
  2. 带参数:

    xylodev@ubuntu:~$ ./my-bash-script.sh foobar
    The 1st argument is of NON ZERO length
    
    Run Code Online (Sandbox Code Playgroud)

我已经发现$1用双引号括起来给我的结果符合预期,但我仍然想知道为什么当没有使用引号并且没有参数调用脚本时,两个测试都返回true?它似乎$1是null然后,所以[ -n $1 ] …

bash shell sh

6
推荐指数
1
解决办法
704
查看次数

如何检查是否存在第二个参数

我需要更新用于git的bash函数:

push() {
  a=$1
  if [ $# -eq 0 ]
    then
      a=$(timestamp)
  fi
  # ... do stuff
}
Run Code Online (Sandbox Code Playgroud)

但我不知道这条线是如何工作的

 if [ $# -eq 0 ]
Run Code Online (Sandbox Code Playgroud)

我需要检查第一个参数,然后再检查第二个参数。

因此,将有2个if语句。

我该如何更新以及该行如何工作

 if [ $# -eq 0 ]
Run Code Online (Sandbox Code Playgroud)

bash

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

如果 bash 中没有传递参数,如何打印帮助

我创建了一个脚本,以便在运行该脚本时使用参数。如何检查是否没有提供参数?如果没有参数通过,它必须显示打印帮助。

while test -n "$1"; do
         case "$1" in
            -help|-h)
            print_help
            exit $ST_UK
            ;;
        --version|-v)
            print_version $PROGNAME $VERSION
            exit $ST_UK
            ;;
        --activeusers|-a)
            opt_var=$2
            au
            shift;;
        --dailyusers|-d)
            opt_var1=$2
            dau
            shift;;
        *)
    echo "Unknown argument: $1"
        print_help
        exit $ST_UK
        ;;
    esac
    shift
done
Run Code Online (Sandbox Code Playgroud)

bash shell

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

需要检查输入参数Mac上的Bash Shell脚本

我想检查OSX上bash脚本上输入参数的存在性。我做:

if [-z "$1"]
Run Code Online (Sandbox Code Playgroud)

我得到:

/usr/local/bin/deploy.sh: line 8: [-z: command not found
Run Code Online (Sandbox Code Playgroud)

有小费吗?

谢谢。

macos bash terminal

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

Case语句没有捕获空字符串

我想检测是否传递了无参数或无效参数并打印帮助消息。一个空的参数单独检查可能的,但不是那么优雅。

我的 bash 脚本如下所示:

COMMAND="$1"
shift
case "$COMMAND" in     
        loop)
            loop_
            ;;  
        ...            
        *)
            echo $"Usage: $0 {loop|...}"
            exit 1 
esac
Run Code Online (Sandbox Code Playgroud)

当没有参数传递时,什么都不执行;如果我通过“”,则会触发正确的情况。如果我$1直接使用而不是使用临时变量,那么它会按预期工作。

我什至尝试添加一个特定的案例,"")但无济于事。

bash shell switch-statement

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