下面是一段转载的shell代码,部分内容已修改:
#!/bin/bash
# $#表示参数的个数
# $@表示参数内容
# $0表示第几个参数
# -ne 不等于
if [ $# -ne 2 ]; then
echo "Usage: $0 <file> <pathname>"
exit 1
fi
TSIZE=0
for FSIZE in $(tar tvvf $1 | awk '{print $3}'); do
if [ "$FSIZE" = "${FSIZE//[^0-9]/}" ]; then
TSIZE=$((TSIZE+FSIZE))
fi
done
[ $TSIZE -eq 0 ] && exit 1
MSG="Extracting..."
REMOTE="project"
PROG_POS=$((${#MSG}+1))
PERC_POS=$((${#MSG}+53))
echo $MSG
sendmessage ${REMOTE} 1
PREV=-1
NSIZE=0
for FSIZE in $(tar xvvf $1 -C $2 | awk '{print $3}'); do
if [ "$FSIZE" = "${FSIZE//[^0-9]/}" ]; then
NSIZE=$((NSIZE+FSIZE))
PERCENT=$((NSIZE*100/TSIZE))
if [ $PERCENT -ne $PREV ]; then
# PLUS=$((PERCENT/2))
# PROGRESS=$(printf "%.${PLUS}d" | tr '0' '+')
# echo -e "\e[A\e[${PROG_POS}G${PROGRESS}=>"
# echo -e "\e[A\e[${PERC_POS}G${PERCENT}%"
sendmessage ${REMOTE} 2 -i ${PERCENT}
PREV=$PERCENT
fi
fi
done
if [ $PERCENT -eq 100 ]; then
sendmessage ${REMOTE} 3
else
sendmessage ${REMOTE} 4
fi
说明:
该脚本将压缩文件解压至指定位置,并把当前进度发送给指定程序。
Usage: ./myshell.sh <file> <pathname>
sendmessage为自编译的执行命令。