Shell编程之条件语言
一、shell简介:
shell的作用----命令解释器“翻译官”
- 介于系统内核与用户之间的,负责解释命令行
今天主要说shell脚本里的一些语句使用
1-1、常用测试
-
文件测试:
[ 操作符 文件或目录 ]
-
整数值比较:
[ 整数1 操作符 整数2 ]
-
字符串比较
[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
[ -z 字符串 ]
-
逻辑测试:
[ 表达式1 ] 操作符 [ 表达式2 ]
命令1 操作符 命令2
1-2、变量
■ 变量的作用
- 用来存放系统和用户需要使用的特定参数(值)
- 变量名:使用固定的名称,由系统预设或用户定义
- 变量值:能够根据用户设置、_系统环境的变化而变化
■ 变量的类型 - 自定义变量:由用户自己定义、修改和使用
- 特殊变量:环境变量,只读变量,位置变量,预定义变量
■自定义变量
■ 定义一个新的变量 - 变量名以字母或下划线开头,区分大小写,建议全大写
■ 查看变量的值
echo $变置名
[root@localhost ~]# Products Python
[root@ local host ~]# Version=2.7.13
[root@localhost ~]# echo $Product
Python
[root@ local host ~]# echo $Product $Version Python 2.7.13
自定义变量
■ 赋值时使用引号
- 双引号:允许通过$符号引用其他变量值
- 单引号:禁止引用其他变量值,$视为普通字符
- 反撇号:命令替换,提取命令执行后的输出结果
■ 从键盘输入内容为变量赋值
read [-p "提示信息"]变量名
■ 设置变量的作用范围
格式1: export变量名…
格式2: export变置名=变置值...
echo "SProduct $Version’ Benet 6.0
export Product Version
basK?
echo "SProduct $Version Benet 6.0
二、 if语句
- 单分支
- 双分支
- 多分支
2-1、if单分支语句
if 条件测试操作
then 命令序列
fi
FHQ=$(systemctl status firewalld |grep "Active:"|awk '{print $2}')
if [ $FHQ = active ]
then
echo "防火墙已启动,不需要操作"
fi
2-2、if双分支语句
if 条件测试操作
then 命令序列
else 命令序列
fi
if [ $? -eq 0 ]
then
echo "host $IP ping is up" && echo "host $IP ping is up" >> /root/up.txt
else
echo "host $IP ping is down" && echo "host $IP ping is down" >> /root/down.txt
fi
2-3、if多分支语句
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else
命令序列3
fi
#!/bin/bash
read -p "请输入你的分数(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
echo "$GRADE 分,优秀!"
elif [ $GRADE -ge 60 ] && [ $GRADE -le 84 ]
then
echo "$GRADE 分,合格!"
elif [ $GRADE -ge 0 ] && [ $GRADE -le 59 ]
then
echo "$GRADE分,不合格!"
else
echo "$GRADE分,输入格式不对,请重新输入:"
fi
三、case分支语句
case 变量值 in
模式1)
命令序列
;;
模式2)
命令序列
;;
......
*)
默认命令序列
esac
四、for语句
- 读取不同的变量值,用来逐个执行同一组命令
for 变量名 in 取值列表
do
命令序列
done
注:取值列表可以是一个文本文件,可以是一个自定义范围值。
如:/opt/as.txt for的取值列表可以文本文件为例,
也可以是{1…10}, $(seq 1 10 ),((i=1;i<=10;i++))
for i in {1..10};do echo $i ;done
1
2
3
4
5
6
7
8
9
10
五、while 语句
- 重复的测试某个条件,只要条件成立则一直反复执行
while 条件测试操作
do
命令序列
done
猜价格游戏!!!
#!/bin/bash
Pr=$(expr $RANDOM % 1000)
TIMES=0
echo "价格的范围为0~999,猜猜是多少?"
while true
do
read -p "请输入您猜测的价格:" JIA
let TIMES++
if [ $JIA -eq $Pr ]
then
echo "恭喜你答对了,实际价格是$Pr"
echo "你总共猜了$TIMES次"
exit 0
elif [ $JIA -gt $Pr ]
then
echo "太高了"
else
echo "太低了"
fi
done