如果语句在命令行内

时间:2013-03-17 02:39:31

标签: bash shell

我正在尝试创建一个shell脚本,事实是,如果填充变量$output,我想更改输出。我在考虑在命令中使用if检查变量,但我不知道它是否是正确的语法。这是一个例子(当然不起作用):

  

ls -lisa | awk'$ 5 ==拥有'拥有=“$ owner”| sort -k $ column -n if [   $ output];然后打印> out.txt fi

我不知道它是否会以这种方式工作,如果可能的话。

2 个答案:

答案 0 :(得分:1)

内置的exec可以更改正在运行的shell脚本的其余部分的默认标准输出。所以,在这种情况下,你会这样做:

if [ -n "$output" ]; then
    exec >out.txt
fi
ls -lisa | awk '$5 == own' own="$owner" | sort -k$column

我不完全确定你要对awk部分做什么,所以这只是你的问题的逐字记录。

另一种选择是将要重定向的脚本部分放入函数中,然后以两种方式之一调用该函数,重定向输出。例如:

do_work() {
    ls -lisa | awk '$5 == own' own="$owner" | sort -k$column
}
if [ -n "$output" ]; then
    do_work >out.txt
else
    do_work
fi

答案 1 :(得分:1)

您可以使用shell的“使用默认值”选项(${variable:-default},默认使用/ dev / stdout)来执行此操作:

ls -lisa | awk '$5 == own' own="$owner" | sort -k$column -n > "${output:-/dev/stdout}"