Shell脚本的智能化
使Shell脚本获得识别能力
为命令的执行提供最直接的识别依据
-文件或目录的读/写等状态
-数值的大小
-字符串是否匹配
-多条件组合
test 测试操作
语法格式
-test 选项 参数
-[ 选项 参数 ]
test a == a #判断a是否等于a
echo #? #查看结果
[ a==a ] #另一种格式,效果同上,字符两边有空格
echo $? #查看结果
字符串比较
[ 操作符 字符串 ]
操作符
-z 字符串的值为空
-n 字符串的值不为空
== 两个字符相同
!= 两个字符不相同
[ -z $a ] #判断a是否是空值
echo $? #查看结果
[ a==b ] #判断a是否等于b
echo $? #查看结果
逻辑组合
&& 成功后执行后面的
|| 失败后执行后面的
当使用两个逻辑符号时:
&& 当有都成功则成功,才能执行
|| 失败一个算失败,就执行
数字的条件测试
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
[ 10 -lt 10 ] && echo "ok" || echo "no"
[ 10 -gt 11 ] && echo "ok" || echo "no"
----------------------------------------------------------------------------------------------
对文件进行测试
-e 文件是否存在
-d 文件是否存在,且是目录
-f 文件是否存在,且是普通文件
-r -w -x 是否有读,写,执行权限
[ -e /opt/1 ] #测试文件是否存在
echo $? #输出结果
使用if判断语句
1.单分支
if 条件测试:then
执行指令1
执行指令2
...
fi
应用示例
判断挂载点目录,若不存在则创建
2.双分支
if 条件;then
执行指令1
执行指令2
...
else
执行指令3
...
fi
脚本应用
目标
- 检测并判断指定的主机是否可ping通
- 目标主机的地址以位置参数提供
3.多分支
if 条件1;then
执行指令1
执行指令2
...
elif 条件2;then
执行指令3
执行指令4
...
else
执行指令n
fi
脚本应用
目标
- 输入一个分数,判断成绩分档
if运用
判断IP通不通
#! /bin/bash
ping -c 5 -i 0.5 -W 1 172.25.0.11
if [ $? -eq 0 ];then
echo 通了
else
echo 没通
fi
~
猜数字
#! /bin/bash
x=$[RANDOM%10]
read -p "请输入一个数字(0-9)" n
if [ $x -eq $n ];then
echo "猜对了"
elif [ $n -lt $x ];then
echo "猜小了$x"
else
echo "猜大了$x"
fi
FOR循环
遍历/列表式循环
-根据变量的不同取值,重复执行命令序列
for 变量名 in 值列表
do
命令序列
done
流程示意图
列表FOR循环
#!/bin/bash
for varible1 in {1..5}
#for varible1 in 1 2 3 4 5
do
echo "Hello, Welcome $varible1 times "
done
C语言风格的for循环
-通过变量控制,条件成立时,循环
-步长可控次数
多次ping
#!/bin/bash
a=0
for i in {1..15}
do
ping -c 3 -i 0.2 -W 1 172.25.0.$i &>/dev/null
if [ $? -eq 0 ];then
echo 通了
let a++
else
echo 不通
fi
done
echo 通了"$a"个
while循环,可以无限次循环
while 条件测试
do
指令
done
while猜数字
#!/bin/bash
n=$[RANDOM%100]
a=0
b=1
while [ $a != $n ]
do
read -p "请输入一个数0-100:" a
if [ $a -eq $n ];then
echo "猜中了是:$a"
elif [ $a -ge $n ];then
echo "$a猜大了:"
let b++
else
echo "$a猜小了:"
let b++
fi
done
echo "你一共猜了$b次"