相关疑难解决方法(0)

在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"语句的"和"运算符

我正在尝试创建一个简单的bash脚本来检查网站是否已关闭,并且由于某种原因"and"运算符不起作用:

#!/usr/bin/env bash

WEBSITE=domain.com
SUBJECT="$WEBSITE DOWN!"
EMAILID="an@email.com"
STATUS=$(curl -sI $WEBSITE | awk '/HTTP\/1.1/ { print $2 }')
STRING=$(curl -s $WEBSITE | grep -o "string_to_search")
VALUE="string_to_search"

if [ $STATUS -ne 200 ] && [[ "$STRING" != "$VALUE" ]]; then
        echo "Website: $WEBSITE is down, status code: '$STATUS' - $(date)" | mail -s "$SUBJECT" $EMAILID
fi
Run Code Online (Sandbox Code Playgroud)

"-a"运算符也不起作用:

if [ $STATUS -ne 200 ] -a [[ "$STRING" != "$VALUE" ]]
Run Code Online (Sandbox Code Playgroud)

你能告诉我什么时候使用:

  • 单方括号和双方括号
  • 插入语

bash if-statement

142
推荐指数
5
解决办法
32万
查看次数

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脚本中引发错误,消息"Test cases Failed !!!".在Bash中如何做到这一点?

例如:

if [ condition ]; then
    raise error "Test cases failed !!!"
fi
Run Code Online (Sandbox Code Playgroud)

linux error-handling bash shell

84
推荐指数
5
解决办法
6万
查看次数

为什么在Bash中'['之前'''之后会有一个空格?

我试图编写一个使用if语句的Bash脚本.

if  [$CHOICE -eq 1];
Run Code Online (Sandbox Code Playgroud)

剧本是给我的错误,直到我后得到的空间[和之前]如下所示:

if  [ $CHOICE -eq 1 ];
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么方括号周围的空间在Bash中如此重要?

syntax bash if-statement

58
推荐指数
3
解决办法
6692
查看次数

什么是相当于Python的`if __name__ =='__ main __'的bash?

在Bash中,我希望能够同时获取脚本并执行该文件.什么是Bash相当于Python的if __name__ == '__main__'

我没有在Stackoverflow上找到关于这个主题的现成问题/解决方案(我怀疑我的问题是这样的方式与现有的问题/答案不符,但这是我能想到的最明显的方式.问题是因为我的Python经验).


ps关于可能的重复问题(如果我有更多时间,我会写一个更短的回复):

链接到问题问:"如何检测如果脚本正在采购",但这个问题是问"你怎么创建一个bash脚本,既可以是采购和运行的脚本?".这个问题的答案可能会使用上一个问题的某些方面,但有其他要求/问题如下:

  • 一旦检测到脚本被采购,不运行脚本的最佳方法是什么(并避免意外的副作用(除了导入感兴趣的功能),如添加/删除/修改环境/变量)
  • 一旦你检测到脚本正在运行而不是源代码实现你的脚本的规范方法是什么(把它放在一个函数中?或者只是把它放在if语句之后?如果你把它放在if语句之后它会有 - 影响?
  • 我在Bash上发现的大多数谷歌搜索都没有涵盖这个主题(一个可以同时获取和执行的bash脚本)实现这个的规范方法是什么?这个话题没有被涵盖,因为它是沮丧还是不好?有陷阱吗?

bash

29
推荐指数
4
解决办法
3380
查看次数

如何在Bash中测试字典小于或等于的字典?

在Bash中,有一种简单的方法可以测试一个字符串是否按字典顺序小于或等于另一个字符串?

我知道你可以这样做:

if [[ "a" < "b" ]]
Run Code Online (Sandbox Code Playgroud)

用于测试严格的不平等,或

if [[ 1 -le 1 ]]
Run Code Online (Sandbox Code Playgroud)

对于数字.但-le似乎没有使用字符串,并使用<=给出语法错误.

bash

25
推荐指数
2
解决办法
3万
查看次数

在Bash中使用多个表达式if语句

我想重新创建这样的东西

if ( arg1 || arg2 || arg 3) {}
Run Code Online (Sandbox Code Playgroud)

我到目前为止,但我收到以下错误

line 11: [.: command not found

if [ $char == $';' -o $char == $'\\' -o $char == $'\'' ]
then ...
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的方法,但似乎没有人尝试过我试过的一些方法

syntax bash if-statement

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

Bash shell中的"[]"与"[[]]"

这可能已经回答了,但无论如何我都会问它.我有两个版本的脚本(comp.sh) -

#!/bin/sh
export tDay=$(date '+%Y%m%d')
newfile="filename_$tDay"
filename="filename_20120821100002.csv"
echo $newfile $filename
if [ $filename = *$newfile* ]
then
  echo "Matched"
else
  echo "Not Matched!"
fi

Output:
$ ./comp.sh
filename_20120821 filename_20120821100002.csv
Not Matched!
Run Code Online (Sandbox Code Playgroud)

#!/bin/sh
export tDay=$(date '+%Y%m%d')
newfile="filename_$tDay"
filename="filename_20120821100002.csv"
echo $newfile $filename
if [[ $filename = *$newfile* ]]
then
  echo "Matched"
else
  echo "Not Matched!"
fi

$ comp.sh
filename_20120821 filename_20120821100002.csv
Matched
Run Code Online (Sandbox Code Playgroud)

有人可以解释我为什么不同?

另外 - 在什么情况下应该[ ]使用vs. [[ ]]反之亦然?

string bash shell scripting if-statement

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

比较bash变量中的多行字符串

我有一个包含两个多行字符串的脚本。我想知道它们是否相等。我还没有找到执行此操作的方法,因为尽管比较容易,但将变量的值传递给比较对象并不容易。我尚未成功将其传递给diff,但这可能是我的无能(我尝试过的很多事情都导致“文件名太长”错误)。一种解决方法是用一些稀有字符替换换行符,但是遇到了同样的问题。有任何想法吗?

string bash pipe

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