shell入门19-shell版本的进度条功能
2023-01-03 本文已影响0人
万州客
实现了3种方法,这里记录一下。
一,第一版
#!/bin/bash
# 功能描述:为复制文件设计一个进度条效果
# 为防止提前按CTRL+C组合键后无法结束进度条
trap 'kill $!' INT
# 定义函数:实现无限显示不换行的#符号
bar() {
while :
do
echo -n '#'
sleep 0.3
done
}
# 调用函数,屏幕显示#进度,直到复制结束kill杀死进度函数
# $!变量保存的是最后一个后台进程的进程号
bar &
cp -r $1 $2
kill $!
echo '复制结束'
二,第二版
#!/bin/bash
# 功能描述:为复制文件设计一个进度条效果
# 为防止提前按CTRL+C组合键后无法结束进度条
trap 'kill $!' INT
# 定义函数:实现无限显示不换行的#符号
bar() {
while :
do
pound=""
for ((i=47;i>=1;i--))
do
pound+=#
printf "|%s%${i}s|\r" "$pound"
sleep 0.3
done
done
}
# 调用函数,屏幕显示#进度,直到复制结束kill杀死进度函数
# $!变量保存的是最后一个后台进程的进程号
bar &
sleep 3
cp -r $1 $2
kill $!
echo '复制结束'
三,第三版
#!/bin/bash
# 功能描述:为复制文件设计一个进度条效果
# 为防止提前按CTRL+C组合键后无法结束进度条
trap 'kill $!' INT
# 定义变量,存储指针的四个符号,有特殊符号一定要用单引号
rotate='|/-\'
# 定义函数:实现无限显示不换行的#符号
bar() {
printf ' '
while :
do
printf "\b%.1s" "$rotate"
rotate=${rotate#?}${rotate%???}
sleep 0.3
done
}
# 调用函数,屏幕显示#进度,直到复制结束kill杀死进度函数
# $!变量保存的是最后一个后台进程的进程号
bar &
sleep 3
cp -r $1 $2
kill $!
echo '复制结束'
四,第四版
#!/bin/bash
# 功能描述:为复制文件设计一个进度条效果
# 为防止提前按CTRL+C组合键后无法结束进度条
trap 'kill $!' INT
#定义变量,存储源与目标容量的大小,目标初始大小为0
src=$(du -s $1 |cut -f1)
dst=0
# 定义变量,存储指针的四个符号,有特殊符号一定要用单引号
rotate='|/-\'
# 定义函数:实现无限显示不换行的#符号
bar() {
printf ' '
while :
do
printf "\b%.1s" "$rotate"
rotate=${rotate#?}${rotate%???}
sleep 0.3
size=$(echo "scale=2;$dst/$src*100" |bc)
echo -en "\r|$size%|"
[ -f $2 ] && dst=$(du -s $2 |cut -f1)
[ -d $2 ] && dst=$(du -s $2/$1 |cut -f1)
sleep 0.3
done
}
# 调用函数,屏幕显示#进度,直到复制结束kill杀死进度函数
# $!变量保存的是最后一个后台进程的进程号
bar &
sleep 3
cp -r $1 $2
kill $!
echo '复制结束'
