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去执行,同时运行,效率高