条件测试

1、条件测试test或[ ](测试条件是真是假)

例如:字符串比较

#!/bin/bash

read data
test "$data" == "hello" //注意等号两边有空格  或者 [ $data == "hello" ]
echo $? //上一条命令的运行结果,成功为0,失败为1

例如:两数比较大小

#!/bin/bash

data=200
[ $data -eq 100 ]
echo $?
[ $data -lt 100 ]
echo $?
[ $data -le 100 ]
echo $?
[ $data -gt 100 ]
echo $?
[ $data -ge 100 ]
echo $?

例如:测试与、非逻辑运算

2、if/then/elif/else/fi

#!/bin/bash

read data
if [ "$data" -eq 100 ];then
    echo "100"
elif [ "$data" -eq 200 ];then
    echo "200"
else
    :  //  :为空命令,该命令不做任何事
fi

#!/bin/bash

read data
[ "$data" -eq 100 ] && {   //成立执行花括号里面,否则执行括号外

    echo "yes"

    exit 0
}
echo "no"

#!/bin/bash

read data
[ "$data" -eq 100 ] || {  //不成立执行花括号里面,否则执行括号外

    echo "yes"

    exit 0
}
echo "no"

3、case/esac

#!/bin/bash

read val
case "$val" in
    start | -s | -start | -START )
        echo "start"
        ;;
    'stop' )
        echo "stop"
        ;;
    '*' )
        echo "*"
        ;;
esac

循环语句

1、for/do/done

写法一:

#!/bin/bash

//for i in {1..100}

for i in {a..z}

do
   echo "$i"
done

运行结果: 打印a...z的字母

写法二:

#!/bin/bash

for(( i=0;i<=100;i++ ))
do
   echo "$i"
done

运行结果: 打印1...100的数字

2、while/do/done  && until/do/done

求1~100 间的偶数的和

#!/bin/bash

sum=0
ret=0
for i in {1..100}
do
    let ret=i%2
    if [ $ret -eq 0 ];then
        let sum+=i
    fi
done
echo $sum

运行结果:2550

3、shell脚本的调试方法

-n : 读一遍脚本中的命令但不执行,用于检查脚本中的语法错误 

-v : 将执行的每一条命令和如果打印出来

-x : 提供跟踪执行信息,将执行过程打印出来

这些选项的使用方法:

 (1) 在命令行提供参数: bash -x ./test.sh

 (2) 在脚本开头提供参数:#!/bin/bash -x

 (3) 在脚本中用set命令启用或禁用

       set-x 和 set+x分别表示启用执行过程和关闭执行过程

数组

bash不支持多维数组,只支持一维数组;只支持序列下标,不支持关联式下标

用shell编写进度条:

#!/bin/bash

i=0
str=''
arr=('|' '/' '-' '\\')
index=0
while [ $i -le 100 ]
do
    let index=i%4
    printf "[%-100s][%d%%][%c]\r" "$str" "$i" "${arr[$index]}"
    sleep 0.1
    let i++
    str+='#'
done
printf "\n"