shell语法及进度条

shell语法

1.条件测试

  • test和[
    测试条件是否成立, 结果为真,退出码为0,否则为1(与c语言相反),不支持通配符和正则表达式
    :[ 与参数之间必须加空格
    [[ ]]也可以用于条件测试,支持通配符和正则表达式

整数比较: -eq(相等)、-lt(小于)、-le(小于等于)、-gt(大于)、-ge(大于等于)、-ne(不等)
字符串比较:==(等于) !=(不等于)
$?用来判断退出码

#!/bin/bash

val=5

test $val -le 10
echo $?

[ $val -gt 10 ]
echo $?

这里写图片描述

常见的测试命令:
[ -d DIR ] DIR存在且为目录则为真
[ -f FILE ] FILE存在且为普通文件则为真
[ -z str ] str长度为0则为真
[ -n str ] str长度非0则为真
与c语言相同,测试条件之间还可以做与、或、非逻辑运算
-a(与) -o(或) !(非)
这里写图片描述
如果str没有被定义,则shell会将其看做空字符串,会造成测试条件的语法错误。

  • if/then/elif/else/fi
    (1)if、else支持嵌套
    (2)if语句中不允许出现空的代码块
    (3):也是一条命令,什么也不做但恒成立
    (4)if检测语句的退出码
    (5)因为没有{},所以以fi结尾
    read:等待用户输入一行字符串,将该字符串存到shell变量中
read val 
if [ $val -le 50 ]
then
echo "A"
else
echo "B"
fi

这里写图片描述
&&和||也可以用在if中,用来连接两个测试条件

  • case和esac
    shell中的case语句可以匹配字符串和正则表达式,分支以;;结尾,找到匹配的分支并执行之后直接跳到esac之后。支持通配符和正则表达式
read val 

case $val in
    start | -s | -a) 
        echo "start"
        ;;  
    [Ss]top)
        echo "stop"
        ;;  
    [0-9])
        echo "hello"
        ;;  
    *)  
        echo "***********"
esac   

这里写图片描述

2.循环语句

  • for/do/done
for (( i=0; i<10; i++ ))  //(())括起来的内容,可以做c规范来操作
do
    echo "$i"
done
for i in {0..9}
do
    echo "$i"
done
  • while/do/done
i=0
while [ $i -lt 10 ]
do
    echo "$i"
    (( i++ ))
done
  • until/do/done 直到条件不成立,否则一直做这件事情
i=0
until [ $i -gt 10 ]
do
    echo "$i"
    let i++ 
done

3.位置参数和特殊变量
$0-n 命令行参数
$# 命令行参数的个数减1
$@ 命令行参数的列表
$$ 当前shell的进程号
位置参数用shift左移 如: shift 1 $3就变成$2

4.函数
(1)shell中函数必须先定义再使用
(2)函数体的 { 和后面的命令之间必须有空格或换行,最后一条命令要和 } 写在一行,则必须加‘;’
(3)定义函数时并不执行里面的命令,到后面调用时才执行
(4)关键字function可以省略,()不可以省略,代码块不能为空

//求最大最小值
function myfun(){
    max=$1
    min=$1

    for i in $@
    do  
        if [ $min -ge $i ]; then
            min=$i  
        fi  
        if [ $max -le $i ]; then
            max=$i
        fi  
    done
}

myfun $@   //调用函数,传参

echo "max=$max"
echo "min=$min"

这里写图片描述

5.数组
(1)bash支持一维数组,不限定数组大小,下标从0开始
(2)用括号表示数组,元素用空格分隔
(3)不会越界,没有类型
例:arr=(1 3.14 ‘c’ “hello world”)
提取数组元素: ${arr[i]},使用@或*可以获取数组中所有元素

shell编写进度条

#!/bin/bash

i=0
str=""
arr=("|" "/" "-" "\\")
while [ $i -le 100 ]
do
    let index=i%4
    printf "[%-100s][%d%%][%c]\r" "$str" "$i" "${arr[$index]}"  //printf也是一条命令
    sleep 0.1
    let i++
    str+='#'  //字符串连接
done  

这里写图片描述

还有一种使用了简单配色方案的进度条

printf如下:

 printf "[%-100s][%d%%][\e[54;41;1m%c\e[0m]\r" "$str" "$i" "${arr[$index]}"

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值