#!/bin/bash
# Script to output the total size of requested filetype recursively
# Error out if no file types were provided
if [ $# -lt 1 ]
then
echo "Syntax Error, Please provide at least one type, ex: sizeofTypes {filetype1} {filetype2}"
exit 0
fi
#set first filetype
types="-name *."$1
#loop through additional filetypes and append
num=1
while [ $num -lt $# ]
do
(( num++ ))
types=$types' -o -name *.'$$num
done
echo "TYPES="$types
find . -name '*.'$1 | xargs du -ch *.$1 | grep total
我的问题就在这里:
#loop through additional filetypes and append
num=1
while [ $num -lt $# ]
do
(( num++ ))
types=$types' -o -name *.'>>$$num<<
done
我只想迭代所有参数,不包括第一个,应该很容易,但是我很难弄清楚如何实现它
4条答案
按热度按时间wz3gfoph1#
从bash手册页:
所以你的循环看起来像这样:
zsbz8rwp2#
如果你要做的只是循环遍历参数,那么试试下面的代码:
要使代码正常工作,请尝试以下操作:
lfapxunr3#
如果你不想包含第一个变量,可以使用shift,或者你可以试试这个,假设变量
s
是你传入的参数.当然,这是假设您传入的字符串本身不是一个单词。
zengzsys4#
下面是一个非破坏性版本,它允许在启用
errexit
时访问第一个参数:输出:
这种方法不使用
shift
,允许参数重用,其他答案使用(( INDEX++ ))
来推进索引,但是当INDEX
初始设置为0
时,(( INDEX++ ))
递增INDEX
,但是计算结果为0
,Bash认为这是错误的。