21 shell流程控制

测试

[ xxx ]

参考上篇博客的元字符

test

test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

参数
-eq (=) 等于则为真
-ne (!=) 不等于则为真
-gt (>) 大于则为真
-ge (>=) 大于等于则为真
-lt (<) 小于则为真
-le (<=) 小于等于则为真

set写jio本的用法

set -o errexit
#等价于set -e , 有错误就退出。


set -o nounset
#在扩展一个没有的设置的变量的时候,    显示错误的信息

set -o pipefail
#set -e有一个例外情况,就是不适用于管道命令。所以就要pipefail(土话翻译是管道失败)所谓管道命令,就是多个子命令通过管道运算符(|)组合成为一个大的命令。Bash 会把最后一个子命令的返回值,作为整个命令的返回值。也就是说,只要最后一个子命令不失败,管道命令总是会执行成功,因此它后面命令依然会执行,set -e就失效了。

if判断

语法

if 条件1;then
	代码1
	代码2
	代码3
elif 条件2;then
	代码1
	代码2
	代码3
elif 条件3;then
	代码1
	代码2
	代码3
.......
else
	代码1
	代码2
	代码3
fi

案例

#!/bin/bash

read -p "请输入您的分数: " score

if [ $score -ge 90 ];then
    echo "优秀"
elif [ $score -ge 80 ];then
    echo "良好"
elif [ $score -ge 70 ];then
    echo "一般" 
else
	echo "很差"
fi
#!/bin/bash

read -p "输入用户名:" inp_user
read -p "输入密码:" inp_pwd

if [ $inp_user = "egon" ] && [ $inp_pwd = "123" ];then
	echo "登录成功"
else
	echo "用户名或者密码错误"
fi

while循环

语法

while true
do
	xxx
	xxx
	xxx
done

案例一

#!/bin/bash

while true
do
    read -p "输入用户名:" inp_user
    read -p "输入密码:" inp_pwd

    if [ $inp_user = "egon" ] && [ $inp_pwd = "123" ];then
        echo "登录成功"
        break
    else
        echo "用户名或者密码错误"
    fi
done

案例二

#动态监控
while true;do ifconfig eth0;sleep 0.5;clear; done 

for循环

语法

for i in [条件]
do
	xxx
	xxx
	xxx
done

案例

方法一

#!/bin/bash

for i in {2..254}
do

    ping -c1 1.1.1.$i &>/dev/null
    if [ $? -eq 0 ];then
        echo "1.1.1.$i ok"
    else
    	echo "1.1.1.$i down"
    fi

done
#相当于串行,自上而下的执行,效率很慢

方法二

#!/bin/bash

for i in {2..254}
do
	(
    ping -c1 1.1.1.$i &>/dev/null
    if [ $? -eq 0 ];then
        echo "1.1.1.$i ok"
    else
    	echo "1.1.1.$i down"
    fi
    ) &
done
#开了好多的子shell去执行,同时运行,效率高
原文地址:https://www.cnblogs.com/zhaokunhao/p/14648421.html