标签: test

not equal 的语法重要吗?

编写脚本时,我通常使用以下语法编写 if,因为我更容易理解接下来发生的事情是不正确的。

if [ ! "$1" = "$2" ]; then
Run Code Online (Sandbox Code Playgroud)

还有人说下面的方法更好

if [ "$1" != "$2" ]; then
Run Code Online (Sandbox Code Playgroud)

问题是当我问为什么以及是否有任何差异时,似乎没有人有任何答案。

那么,这两种语法之间有什么区别吗?其中一个比另一个更安全吗?或者这只是偏好/习惯问题?

shell test

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

unix 中的测试命令不打印输出

当我在终端输入这个

test 4 -lt 6
Run Code Online (Sandbox Code Playgroud)

我没有得到任何输出。为什么不?我需要那个 0 或 1

shell bash command test

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

为什么 while [ 0 ] 进入无限循环?

我看到下面循环的行为与带有while [ 1 ]. 为什么呢?

while [ 0 ]; do
    echo "hello"
done
Run Code Online (Sandbox Code Playgroud)

shell bash test

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

为什么在 [[ ]] 测试中使用双引号?

假设我们在 bash 脚本中有 2 个整数:

value1=5
value2=3
Run Code Online (Sandbox Code Playgroud)

那么为什么我们需要在测试的情况下使用双引号呢?例如:

if [[ "$value1" -eq "$value2" ]]
Run Code Online (Sandbox Code Playgroud)

为什么不使用以下内容?

if [[ $value1 -eq $value2 ]]
Run Code Online (Sandbox Code Playgroud)

对我来说,双引号没有任何意义。

shell bash quoting test variable

23
推荐指数
3
解决办法
2847
查看次数

如何使用 nounset shell 选项测试 4.2 版之前的 Bash 中是否定义了变量?

对于“GNU bash,版本 4.2”之前的 Bash 版本,是否有任何等效-vtest命令选项替代方案?例如:

shopt -os nounset
test -v foobar && echo foo || echo bar
# Output: bar
foobar=
test -v foobar && echo foo || echo bar
# Output: foo
Run Code Online (Sandbox Code Playgroud)

bash test

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

比较 Bash 中的两个字符串

我的ifbash 脚本中有以下块:

if [ ${PACKAGENAME} -eq kakadu-v6_4-00902C ]; then
  echo "successfully entered if block!!"
fi
Run Code Online (Sandbox Code Playgroud)

该脚本执行不进入我的if块,即使$PACKAGENAME是相同kakadu-v6_4-00902C。我究竟做错了什么?

bash shell-script test

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

zsh中单括号中的字符串比较

用于打印所有文件夹的 Bash 代码:

for f in ~/*;
do
if [ $f  == '/home/sk/.' -o $f  == '/home/sk/..' ]; then
       true
  else
     echo "$f"
  fi
done
Run Code Online (Sandbox Code Playgroud)

它适用于 bash。当我在 z shell 上运行代码时,它抛出了错误:

 = not found
Run Code Online (Sandbox Code Playgroud)

然后我转换[[[, ]into]]以避免在 z shell 中出现此错误并在 z shell 上运行它。它抛出了下一个错误:

condition expected: $f
Run Code Online (Sandbox Code Playgroud)

使用[[and ]],bash 也会抛出错误:

syntax error in conditional expression
syntax error near `-o'
Run Code Online (Sandbox Code Playgroud)

是否有一个 POSIX 标准可以在 shell 中进行字符串比较,它可以跨 shell 工作?

bash zsh test

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

如何在shell脚本中比较程序的版本?

假设我想比较gcc版本以查看系统是否安装了最低版本。

为了检查gcc版本,我执行了以下操作

gcc --version | head -n1 | cut -d" " -f4
Run Code Online (Sandbox Code Playgroud)

输出是

4.8.5
Run Code Online (Sandbox Code Playgroud)

所以,我写了一个简单的if语句来检查这个版本与其他一些值

if [ "$(gcc --version | head -n1 | cut -d" " -f4)" -lt 5.0.0 ]; then
    echo "Less than 5.0.0"
else
    echo "Greater than 5.0.0"
fi
Run Code Online (Sandbox Code Playgroud)

但它抛出一个错误:

[: integer expression expected: 4.8.5
Run Code Online (Sandbox Code Playgroud)

我理解我的错误,我使用字符串进行比较并且-lt需要整数。那么,有没有其他方法可以比较版本?

version shell-script test numeric-data

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

括号表达式(无范围)匹配 bash 中的意外字符

我在 Linux 上使用 bash。我从以下 if 语句中获得了成功,但这不应该返回失败代码吗?

if [[ ? = [???] ]] ; then echo yes ; fi
Run Code Online (Sandbox Code Playgroud)

正方形不等于任何字符,所以我不明白为什么我会得到成功代码。

在我的案例中保留双括号对我来说很重要。

在这种情况下有没有其他方法可以做一个范围,或者有什么其他建议?

bash locale test

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

if 条件中的括号:为什么我会收到没有空格的语法错误?

当脚本在一年的开始两天运行时,我使用下面的脚本将两天后移,并检查每个月的第一天和第二天,然后将后移两天。

if [$month="01"] && [$day="01"]; then
        date="$last_month/$yes_day/$last_year"
        fulldate="$last_month/$yes_day/$last_year"
else
        if [$month="01"] && [$day="02"]; then
                date="$last_month/$yes_day/$last_year"
                fulldate="$last_month/$yes_day/$last_year"
        else
                if [ $day = "01" ]; then
                        date="$last_month/$yes_day/$year"
                        fulldate="$year$last_month$yes_day"
                else
                        if [ $day = "02" ]; then
                                date="$last_month/$yes_day/$year"
                                fulldate="$year$last_month$yes_day"
                        else
                                date="$month/$yes_day/$year"
                                fulldate="$year$month$yes_day"
                        fi
                fi
        fi
fi
Run Code Online (Sandbox Code Playgroud)

但我的坏消息是收到以下错误消息

Etime_script.sh: line 19: [06=01]: command not found
Etime_script.sh: line 24: [06=01]: command not found
Run Code Online (Sandbox Code Playgroud)

shell bash shell-script whitespace test

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