shell实现一个简单进度条

来源:互联网 发布:哪个软件收视率准 编辑:程序博客网 时间:2024/05/21 17:47

shell简单语法

条件测试

用命令test或[ 测试一个条件是否成立。如果测试条件为真,命令的Exit Status为0,测试条件为假,Exit Status为1。
这里写图片描述

这里写图片描述
这里输入的数字比10大,条件成立为0,比10小条件不成立为1.
整数比较

-lt//小于   -le//小于等于   -gt//大于-ge//大于等于 -eq//等于-ne//不等于

测试命令
这里写图片描述

与 或 非 的测试命令
这里写图片描述

分支语句if/then/elif/else/fi

#!/bin/bashread val if [ $val -eq 100 ]then    echo "true"else    echo "false"fi


if可以添加对任何命令的检测,它是根据命令的退出码判断
if支持嵌套
if不能出现空的代码块

case…esac
可以检测所有语句包括正则表达式

#!/bin/bashread opcase $op in    start )    echo "start"    ;;    stop )    echo "stop"    ;;    restart )    echo "restart"    ;;    * )    echo "default"esac

循环语句

for/do/done

#!/bin/bashfor i in {1..10}do    echo $idone
#!/bin/bashfor(( i=1; i<10; i++))//当成c语言的语法来处理do    echo $idone

while/do/done

#!/bin/bashi=0while [ $i -le 10 ]do    echo $i    let i++done

位置参数和特殊变量

$0//相当于c语言main函数的argv[0]$1,$2,$3... //位置参数,相当于c语言main函数的argv[1],argv[2]...$#//相当于main函数的argc-1$@//表示参数列表“$1"$2"...$?//上一条命令的Exit Status$$//当前shell的进程号

函数

#!/bin/bashfunction fun(){    return $1}fun "$@"//传参ret=$?//接受上一条命令的退出码if [ $ret -eq 0 ]then    echo "success"else    echo "false"fi

数组

arr=(1 2 3 "e" 5.34)//用空格隔开echo ${arr[3]}//输出下标为3的echo ${arr[@]}//将数组整体输出echo ${arr[*]}//将数组个数作为变量输出


进度条实现

#!/bin/bashi=0bar=''index=0arr=( "|" "/" "-" "\\" )while [ $i -le 100 ]do    let index=index%4    printf "[%-100s][%d%%][\e[43;46;1m%c\e[0m]\r" "$bar" "$i" "${arr[$index]}"    let i++    let index++    usleep 30000    bar+='#'doneprintf "\n"

这里写图片描述

原创粉丝点击