案例1:基于case分支编写脚本
案例2:编写一键部署软件脚本
案例3:启动脚本
案例4:使用Shell函数
案例5:中断及退出
案例6:字符串截取及切割
案例7:字符串初值的处理
1 案例1:基于case分支编写脚本
1.1 问题
本案例要求编写test.sh脚本,相关要求如下:
能使用redhat、fedora控制参数
控制参数通过位置变量$1传入
当用户输入redhat参数,脚本返回fedora
当用户输入fedora参数,脚本返回redhat
当用户输入其他参数,则提示错误信息
1.2 方案
case分支属于匹配执行的方式,它针对指定的变量预先设置一个可能的取值,判断该变量的实际取值是否与预设的某一个值相匹配,如果匹配上了,就执行相应的一组操作,如果没有任何值能够匹配,就执行预先设置的默认操作。
case分支的语法结构如下所示:
case 变量 in
模式1)
命令序列1 ;;
模式2)
命令序列2 ;;
… …
*)
默认命令序列
esac
1.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:编写脚本文件
脚本编写参考如下:
[root@svr5 ~]# vim test.sh
#!/bin/bash
case $1 in
redhat)
echo “fedora”;;
fedora)
echo “redhat”;;
*) //默认输出脚本用法
echo “用法: $0 {redhat|fedora}”
esac
[root@svr5 ~]# chmod +x test.sh
步骤三:验证、测试脚本
未提供参数,或提供的参数无法识别时,提示正确用法:
[root@svr5 ~]# ./test.sh
用法: ./test.sh {redhat|fedora}
确认脚本可以响应redhat控制参数:
[root@svr5 ~]# ./test.sh redhat
fedora
确认脚本可以响应fedora控制参数:
[root@svr5 ~]# ./test.sh fedora
redhat
2 案例2:编写一键部署软件脚本
2.1 问题
本案例要求编写脚本实现一键部署Nginx软件(Web服务器):
一键源码安装Nginx软件
脚本自动安装相关软件的依赖包
2.2 步骤
实现此案例需要按照如下步骤进行。
1)依赖包
源码安装Nginx需要提前安装依赖包软件gcc,openssl-devel,pcre-devel
步骤一:编写脚本
1)参考脚本内容如下:
[root@svr5 ~]# vim test.sh
#!/bin/bash
yum -y install gcc openssl-devel pcre-devel
tar -xf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure
make
make install
2)确认安装效果
Nginx默认安装路径为/usr/local/nginx,该目录下会提供4个子目录,分别如下:
/usr/local/nginx/conf 配置文件目录
/usr/local/nginx/html 网站页面目录
/usr/local/nginx/logs Nginx日志目录
/usr/local/nginx/sbin 主程序目录
主程序命令参数:
[root@svr5 ~]# /usr/local/nginx/sbin/nginx //启动服务
[root@svr5 ~]# /usr/local/nginx/sbin/nginx -s stop //关闭服务
[root@svr5 ~]# /usr/local/nginx/sbin/nginx -V //查看软件信息
3 案例3:启动脚本
3.1 问题
本案例要求编写Ngin启动脚本,要求如下:
脚本支持start、stop、restart、status
脚本支持报错提示
脚本具有判断是否已经开启或关闭的功能
3.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:编写脚本
脚本通过位置变量$1读取用户的操作指令,判断是start、stop、restart还是status。
netstat命令可以查看系统中启动的端口信息,该命令常用选项如下:
-n以数字格式显示端口号
-t显示TCP连接的端口
-u显示UDP连接的端口
-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口
-p显示监听端口的服务名称是什么(也就是程序名称)
1)参考脚本内容如下:
[root@svr5 ~]# vim test.sh
#!/bin/bash
case $1 in
start)
/usr/local/nginx/sbin/nginx;;
stop)
/usr/local/nginx/sbin/nginx -s stop;;
restart)
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nignx/sbin/nginx;;
status)
netstat -ntulp |grep -q nginx
if [ $? -eq 0 ];then
echo 服务已启动
else
echo 服务未启动
fi;;
*)
echo Error;;
esac
2)执行测试脚本:
[root@svr5 ~]# ./test.sh start
[root@svr5 ~]# ./test.sh stop
[root@svr5 ~]# ./test.sh status
[root@svr5 ~]# ./test.sh xyz
4 案例4:使用Shell函数
4.1 问题
本案例要求编写脚本mycolor.sh,相关要求如下:
将颜色输出的功能定义为函数
调用函数,可以自定义输出内容和颜色
4.2 方案
在Shell脚本中,将一些需重复使用的操作,定义为公共的语句块,即可称为函数。通过使用函数,可以使脚本代码更加简洁,增强易读性,提高Shell脚本的执行效率
1)函数的定义方法
格式1:
function 函数名 {
命令序列
… …
}
格式2:
函数名() {
命令序列
… …
}
2)函数的调用
直接使用“函数名”的形式调用,如果该函数能够处理位置参数,则可以使用“函数名 参数1 参数2 … …”的形式调用。
注意:函数的定义语句必须出现在调用之前,否则无法执行。
- 测试语法格式
[root@svr5 ~]# mycd(){ //定义函数
mkdir /test
cd /test
}
[root@svr5 ~]# mycd //调用函数
[root@svr5 ~]# mycd(){ //定义函数
mkdir $1
cd $1
}
[root@svr5 ~]# mycd /abc //调用函数
[root@svr5 ~]# mycd /360 //调用函数
4.3 步骤
实现此案例需要按照如下步骤进行。