文件名:树(可执行文件)
#!/bin/bash
for i in $*
do
if [ -d $i ]; then
echo "===================$i================" >> ?????
tree -L 1 $i >> ?????
fi
done
如您所见,我想列出我输入的参数的树结构,我想让所有树结构重定向到最后一个文件(它的id是$#),它是“????? “在这个脚本中,因为我不知道如何写它。
例如:
./Tree ./* README
是的,所有目录树结构都将在README中写入!
答案 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