脚本重定向命令输出到最后的文件名参数

时间:2015-10-21 17:59:59

标签: linux bash shell

文件名:树(可执行文件)

#!/bin/bash
for i in $*
do
    if [ -d $i ]; then

        echo "===================$i================" >> ????? 
        tree -L 1 $i >> ?????
    fi
done

如您所见,我想列出我输入的参数的树结构,我想让所有树结构重定向到最后一个文件(它的id是$#),它是“????? “在这个脚本中,因为我不知道如何写它。

例如:

./Tree ./* README

是的,所有目录树结构都将在README中写入!

2 个答案:

答案 0 :(得分:3)

如果您的输出文件是第一个参数而不是最后一个

,那么这样做会更容易/更简单。

那只需要

output=$1
shift

添加到脚本的顶部。

使用最后一个参数并不难,它只涉及更多“高级”变量用法:

#!/bin/bash
output="${@: -1}"

for i in "${@:0:${#@}}"
do
    if [ -d "$i" ]; then

        echo "===================$i================" >> "$output"
        tree -L 1 "$i" >> "$output"
    fi
done

其中"${@: -1}"是参数数组中的最后一个元素,"${@:0:${#@}}"0${#@}的参数($@的长度是 SELECT SUM(amount) FROM (SELECT SUM(Amount) AS amount FROM AccountTransactions INNER JOIN AccountTransactionDocuments ON AccountTransactions.AccountTransactionDocumentId = AccountTransactionDocuments.Id WHERE AccountTransactionDocuments.Date > '{Start}' AND AccountTransactionDocuments.Date < '{End}' AND AccountTransactions.Name = 'Cash Payment' UNION ALL SELECT SUM(CASE WHEN TenderedAmount > 0 THEN TenderedAmount ELSE 0 END) AS amount FROM Payments WHERE Payments.Date > '{Start}' AND Payments.Date < '{End}' AND Payments.Name = 'Cash') AS amounts 脚本的参数计数。)

答案 1 :(得分:2)

最好将输出文件的名称​​放在中,这样它就不会干扰您迭代的可变长度文件列表:

#!/bin/bash
output=$1
shift

for i in "$@"; 
do
    if [ -d "$i" ]; then

        echo "===================$i================" 
        tree -L 1 "$i"
    fi
done > "$output"

然后将您的脚本称为

./Tree README ./*

更好的是,确实没有必要将输出文件的名称传递给脚本;让脚本写入标准输出并在外面进行重定向。

./Tree ./* > README