首页 > 解决方案 > if 语句使用“sed”设置变量不起作用

问题描述

我正在尝试获取一个 if 语句来读取最后一行为 0 的文本文件 (tmp.txt) 的第一行。“then”命令基本上进入一个目录并在返回之前运行一系列用于 DNA 序列分析的命令,删除 tmp.txt 的第一行并移动到 tmp.txt 中列出的下一个目录。一旦到达所有列出目录的末尾,最后一行将只是“0”或“文件结尾”。问题是,它只是不工作,我不知道为什么。我已经换掉了“then”和“else”命令,以使测试更容易一些。

#!bin/bash/sh
value=`(sed -n 1p tmp.txt)` 
if ($value -eq 0) 
then
echo "I wish i could eat cheese again" 
else
echo "theres still more barcodes left" 
fi

标签: bashif-statementsed

解决方案


像这样的括号bash创建子shell来运行封闭的命令。命令根本不需要它们sed,它们也不是您在命令中测试值所要寻找的if。现在运行命令并存储其值的首选方法不是使用反引号,而是$(...)语法。

对于算术测试,您可以使用双括号((...)),或者您可以使用[同义词testbash具有扩展版本[[...]]。特别是,括号后的空格是必不可少的,因为在这种情况下[您正在尝试运行该命令[

将这些东西放在一起,我们可以像这样更新您的代码段:

#!/bin/bash
value=$(sed -n 1p tmp.txt)
if [[ $value -eq 0 ]] 
then
    echo "I wish i could eat cheese again" 
else
    echo "theres still more barcodes left" 
fi

(另外,我将 shebang 行固定为指向/bin/bash,而不是显然命名为/bin/bash/sh可能不存在的可执行文件)


推荐阅读