1. case
工作原理:**
● case语句为多重匹配语句
● 如果匹配成功,执行相匹配的命令
语法结构
case $变量名称 in <== 关键字为case,还有变量前有$
"第一个变量内容") <== 每个变量内容建议用双引号括起来,关键字则为小括号)
程序段
;; <== 每个类型结尾使用两个连续的分号来处理
"第二个变量内容")
程序段
;;
*) <== 最后一个变量内容都会用*来表示所有其它值,不包含第一个变量内容和第二个变量内容的其它程序执行段
程序段
;;
esac
案例1: 服务状态管理
● 当给程序传入start、stop、restart三个不同参数时分别执行相应命令
case $1 in
start|S)
systemctl start httpd &> /dev/null && echo "apache 启动成功"
stop|T)
systemctl stop httpd &> /dev/null && echo "apache 停止成功"
restart|R)
systemctl restart httpd &> /dev/null &&echo "apache 重启完毕"
案例2:模拟一个多任务维护界面
● 当执行程序时先显示总菜单,然后进行选择后做相应维护监控操作
disk 监控磁盘使用情况
memory 监控内存使用情况
upload 监控启动负载
#! /bin/bash
#1.打印菜单栏信息
function munu(){
echo '
***************请选择**********
h 显示命令帮助
f 显示磁盘分区
d 显示磁盘挂载
m 显示内存信息
u 查看系统负载
q 退出程序
*********************************
'
}
menu
while true
do
read -p “请输入你要操作的选项:” choice
case $choice in
h)
menu
;;
f)
echo '*********磁盘分区'
blkid | cut -d : -f1
;;
m)
echo '*********内存信息'
free -m
;;
u)
echo '*********系统负载'
uptime
q)
exit 0
echo '正在退出欢迎下次使用'
;;
*)
echo '请通过h查看帮助'
;;
done
案例3:监控信息
● 输入不同的命令,监控不同的系统信息
#!/bin/bash
read -p "Please input disk,mem,upload:" I
case $I in
disk|DISK)
watch -n 1 "df -h /"
;;
mem|MEM)
watch -n 1 "free -m"
;;
upload|UPLOAD)
watch -n 1 uptime
;;
*)
echo "input error"
;;
esac
2. 函数
● 什么是函数?
- shell中允许将一组命令集合或语句形成一段可用代码,称为shell函数
- 给这段代码起个名字称为函数名,后续可以直接调用该段代码的功能
function 函数名()
{
函数体(一堆命令的集合,来实现某个功能)
echo hello
echo world
}
案例:有颜色的字符串输出
RED=”\033[31m” ##红色符号
GREEN=”\033[32m” ##绿色符号
YELLOW=”\033[33m” ##黄色符号
END=”\033[0m” ##结束符号
print_color_string(){
color=$1
string=$2
case $color in
red)
echo -e “$RED $string $END”
;;
green)
echo -e “$GREEN $string $END”
;;
blue)
echo -e “$BLUE $string $END”
;;
}
##测试
print_color_string ‘red’ ‘nihao’
3. 运算符号
+
##加法
-
##减法
*
##乘法
/
##除法
%
##除法后的余数
**
##乘方
++
##自加
--
##自减
<
##小于
<=
##小于等与
>
##大于
>=
##大于等与
=
##等于
+=
##j+=i等价于j=j+i
*=
##j=j*i
/=
##j=j/i
%=
##j=j%i
4. 运算指令
(())
##((a=1+2))
let
##let a=1+2
expr
##expr 1 + 2 注意有空格
bc
##数学计算器
$[]
##echo $[1+2]