美文网首页
shell入门19-shell版本的进度条功能

shell入门19-shell版本的进度条功能

作者: 万州客 | 来源:发表于2023-01-03 08: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 '复制结束'
image.png

相关文章

网友评论

      本文标题:shell入门19-shell版本的进度条功能

      本文链接:https://www.haomeiwen.com/subject/nhaqcdtx.html