一、shell 脚本
1.基本概念
shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件 中,进行处理业务逻辑,脚本不用编译即可运行,它从一定程度上减轻 了工作量,提高了工作效率,还可以批量、定时处理主机,方便管理员 进行设置或者管理。
可以简单将shell看作是用户和操作系统之间的命令解释器
2.shell 脚本编写注意事项
shell脚本名称命名一般为英文、大写、小写、后缀以.sh结尾
不能使用特殊符号、空格 名称要写的一眼可以看出功能,也就是顾名思义
shell脚本首行需要#!/bin/bash开头
shell脚本变量不能以数字、特殊符号开头,可以使用下划线 _,但不能 用破折号——
3.shell 脚本的构成
(1)脚本声明
(2)注释信息
(3)可执行语句
一、简单脚本的创建和运行
1.编写脚本
[root@shell ~]# vim hello.sh
2.运行脚本
方法一:bash
[root@shell ~]# bash hello.sh
hello world!
方法二:sh
[root@shell ~]# sh hello.sh
hello world!
方法三:source
[root@shell ~]# source hello.sh
hello world!
方法四:x先赋予x权限,然后 ./
[root@shell ~]# chmod +x hello.sh
[root@shell ~]# ./hello.sh
hello world!
二、编写nginx安装脚本
用shell脚本自动化部署安装nginx
方法一:
第一步:创建一个shell目录
[root@shell ~]# mkdir shell
进入创建的目录
[root@shell ~]# cd /root/shell/
第二步:编写脚本
[root@shell shell]# vim install_nginx.sh
第三步:执行脚本
给脚本赋予x权限
[root@shell shell]# chmod +x install_nginx.sh
执行脚本
[root@shell shell]# ./install_nginx.sh
方法2:
编写脚本
[root@shell ~]# vim nginxinstall.sh
运行脚本
[root@shell ~]# bash nginxinstall.sh
三、变量
1.变量命名规则:
必须由大写字母、小写字母、下划线、数字,并且首字 母不能是数字
2.变量值的类型:
值的类型会分为整型、浮点型、字符串型、布尔型等, 而且使用变量需要指定类型Shell 默认的变量类型都是字符串,无需指 定类型
3.变量的分类
(1)自定义变量
由用户自己定义、使用和修改
变量名=值中,等于号=之前和之后不能有空格
(2)环境变量
由系统维护,用于设置工作环境
$PWD
$SHELL
$USER
$PATH
PATH变量用于设置可执行程序的默认搜索路径,可以修改全局变 量文件/etc/profile 或修改某用户家目录下的~/.bash_profile文件永久改 变环境变量。
[root@localhost ~]# env # 查看所有环境变量
(3)位置变量
通过命令行给脚本程序传递参数 (也属于预定义变量)
为了在使用Shel脚本程序时,方便通过命令行为程序提供操作参数, Bash引入了位置变量的 概念位置变量有 ,n,n为1~9之间的数字
$0:第一个字段表示命令名或脚本名称
$1:脚本要处理的第一个参数
$2:脚本要处理的第二个参数
Shell脚本最多可以直接处理9个参数
yum -y install bc
四、条件判断语句
if 条件判断 ; then条件成 ⽴ 执 ⾏ 的命令 ( 可以有多个命令,命令执行方式为逐行执行要么全执行,要么全不执行 )fi
if 条件判断 ; then条件成 ⽴ 执 ⾏ 的命令 ( 可以有多个命令 )else条件不成 ⽴ 执 ⾏ 的命令 ( 可以有多个命令 )fi
(一)数字判断
3.编写检测网络是否畅通的脚本
第一步:创建脚本
[root@shell ~]# vim ping.sh
第二步:执行脚本
[root@shell ~]# bash ping.sh
(二)字符串判断
[root@localhost test]# vim zifu.sh#!/bin/bashread -p "请输⼊账号:" nameif [ "$name" == "admin" ];then # 字符串判断需要加双引号echo "欢迎您,$name!"elseecho "系统未查询到此账号,请您重新输⼊!"fi:wq[root@localhost test]# sh ./zifu.sh请输⼊账号:admin欢迎您,admin![root@localhost test]# sh ./zifu.sh请输⼊账号:ads系统未查询到此账号,请您重新输⼊![root@localhost test]#
(三)文件判断
五、与或判断
六、多重判断语法 elif
if 条件1; then#命令,条件1成⽴执⾏elif 条件2;then#命令,条件1不成⽴,条件2成⽴执⾏elif 条件3;then#命令,条件1不成⽴,条件2不成⽴,条件3成⽴执⾏else#命令 ,以上条件都不成⽴执⾏fi
七、多重判断的 case 语句
[root@localhost test]# vim fscase.sh#!/bin/bash#使⽤case语句编写分数等级评定脚本read -p "请输⼊您的分数(0-100):" fscase $fs in[0-9]|[0-5][0-9]) # 0到9或59以内的两位数echo "$fs分,不及格!";;6[0-9]) # 6开头的两位数,若$fs输入为0,则判定为60,即执行下面的echo命令echo "$fs分,及格!";;7[0-9]|8[0-5]) # 以7开头的两位数或以8开头的两位数echo "$fs分,良好!";;8[6-9]|9[0-9]|100) # 以8开头的两位数,第二位最少为6,也就是最小是86 | 以9开头的两位数 | 100echo "$fs分,优秀!";;*) # 输入不在上述规则内的其他字符,则echo如下命令echo "您输⼊的分数有误!"esac
[root@localhost test]# sh ./fscase.sh请输⼊您的分数(0-100):55分,不及格![root@localhost test]# sh ./fscase.sh请输⼊您的分数(0-100):5858分,不及格![root@localhost test]# sh ./fscase.sh请输⼊您的分数(0-100):6969分,及格![root@localhost test]# sh ./fscase.sh请输⼊您的分数(0-100):7070分,良好![root@localhost test]# sh ./fscase.sh请输⼊您的分数(0-100):8989分,优秀![root@localhost test]# sh ./fscase.sh请输⼊您的分数(0-100):100100分,优秀![root@localhost test]# sh ./fscase.sh请输⼊您的分数(0-100):110您输⼊的分数有误![root@localhost test]#
八、脚本循环语句
(一)for 循环
for 变量名 in 取值列表 ( 范围 )do命令序列done
(二)while 循环
while 条件测试操作do命令序列done
(三) break 和 continue
#!/bin/bashfor line in 北京 上海 ⼴ 州 深圳doecho $lineif [ " $line " == " 上海 " ];then $ 循环到上海 ⽴ 即退出breakfidone:wq[root@localhost test] # bash test.sh北京上海
[root@localhost test]# vim test.sh#!/bin/bashfor line in 北京 上海 ⼴州 深圳doif [ "$line" == "上海" ];thencontinuefiecho $linedone:wq
[root@localhost test]# bash test.sh北京⼴州
深圳