shell实现一个简单进度条

shell简单语法

条件测试

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

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

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

测试命令
shell实现一个简单进度条_第1张图片

与 或 非 的测试命令
shell实现一个简单进度条_第2张图片

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

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


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

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

#!/bin/bash
read op
case $op in
    start )
    echo "start"
    ;;
    stop )
    echo "stop"
    ;;
    restart )
    echo "restart"
    ;;
    * )
    echo "default"
esac

循环语句

for/do/done

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

while/do/done

#!/bin/bash
i=0
while [ $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/bash
function 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/bash
i=0
bar=''
index=0
arr=( "|" "/" "-" "\\" )
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+='#'
done
printf "\n"

这里写图片描述

你可能感兴趣的:(shell脚本)