shell脚本基本应用

标准输入stdin:0
标准输出stdout 1
标准错误 stderr 2
a << a.txt a >> a.txt 混合 a & >>a.txt 正确错误分开 cat /etc/profile asdasdas 1>>1.txt 2>>2.txt

Linux系统中的shell脚本时一个特殊的应用程序,介于用户和操作系统之间,充当了一个命令解释器的角色。负责接收用户输入的操作指令,并进行解释将需要执行的操作传递给内核执行,并输出结果。

执行脚本的三种方式

1、 需要脚本有执行权限,
这里写图片描述
这里写图片描述
2、sh 脚本文件路径
这里写图片描述
3、source脚本文件路径 (相当于.空格/路径)
这里写图片描述

管道操作

过滤 /etc/passwd bash结尾的文件
这里写图片描述
awk 以冒号分割,输出第一和第七字段。-F部分用来指定分割符号。
这里写图片描述

shell变量类型

1、自定义变量
2、环境变量
3、位置变量
4、预定义变量
/etc/profile (全局)、~./bash-profile(局部)

查看和引用变量的值

这里写图片描述

变量赋值的特殊操作

在等号=后面直接指定变量内容是为变量赋值的基本方法,除此之外还有一些赋值操作。

1、双引号” :起界定字符串的作用,特别是当要赋值的内容包含空格时,必须以双引号括起来。(允许通过$符号引用其他变量值)。
这里写图片描述

‘ 2、单引号’ :当要赋值的内容包含 "   视为普通字符)
这里写图片描述
3、 反撇号` :允许将执行某个命令的屏幕输出结果赋值给变量,(命令替换,提取命令执行后的输出结果,可以使用$()代替 )
这里写图片描述
反撇号难以在一行命令中实现嵌套命令替换操作,这时可以用$()替换。
这里写图片描述
4、read -p
这里写图片描述

设置变量的作用范围

默认情况,新定义的变量只在当前shell有效,因此称为局部变量,当进入子程序或新的子shell环境时,局部变量将无法再使用。
这里写图片描述
export 可以将指定的变量导出为全局变量。也可以同时指定多个变量名作为参数。不需要用$符号
这里写图片描述
export导出全局变量同时,也可以为变量赋值。
这里写图片描述

数值变量的运算

+加 -减 *乘 /除 %取余

只能进行简单的整数运算,不支持小数运算。 expr
这里写图片描述
若要将运算结果赋值给其他变量,可以结合命令替换操作 使用反撇号
这里写图片描述

特殊的shell变量

1、环境变量
系统提前创建,用于设置用户的工作环境。 常见的PATH=$PATH:/目录
这里写图片描述
这里写图片描述
2、位置变量。$1 $2 …$9 也称为位置参数。$0代表的是字段名。其余的字符串参数从左到右顺序依次赋值给位置变量。
这里写图片描述
这里写图片描述

3、预定义变量。
$# 表示命令行中位置参数的个数
$* 表示所有位置参数的内容
$? 表示前一条命令执行后的返回状态,0为正确。非0均表示执行出现异常。
$0 表示当前执行的脚本或程序的名称。
这里写图片描述
这里写图片描述

Shell 脚本应用(一)案例

一、shell脚本基础

1、第一个脚本
vim first.shShell
这里写图片描述
分别使用三种方法执行脚本:
./first.sh (需要有可执行的权限)
sh first.sh
. first.sh(或source first.sh)

2、重定向与管道符
1)重定向输出(>)
这里写图片描述
2)重定向输出(>>追加)
这里写图片描述
3)重定向输入<
useradd jerry
vi pass.txt (在里面输入123456,保存退出)
这里写图片描述
注明:将jerry用户的密码设置为123456

4)错误重定向(2>)
这里写图片描述
5)混合重定向输出(&>)
例如:在编译源码包的自动化脚本中,若要忽略make,make install等操作过程的信息,可以将其定向到空文件/dev/null
先挂载光盘(第一章的“linux安全及高级应用_web网络服务.iso”),将光盘的中的httpd-2.2.17.tar.gz文件解压到/usr/src下,编写脚本安装。
vim httpd_install.sh
这里写图片描述
chmod +x httpd_install.sh (设置可执行权限)
./ httpd_install.sh (执行脚本,等待结束后,查看结果)

6)管道符(|)
先查看以“/bin/bash”结尾的行
这里写图片描述
只输出用户名和登录的shell列
这里写图片描述
7)管道符(|):提取根分区的磁盘使用率信息
这里写图片描述

二、使用shell变量

1、定义新的变量
这里写图片描述
2、变量赋值的特殊操作
1)双引号使用(”):赋值的内容包含空格时
这里写图片描述
2)单引号使用(’):赋值的内容中包含$, ‘’ , \ 等具有特殊含义的字符时
这里写图片描述
3)反撇号使用(`): 用于将某个命令的输出结果赋值给变量
这里写图片描述
4)$()来代替反撇号操作,可以解决嵌套的问题
这里写图片描述
5)read命令:用来提示用户输入信息,例如:
这里写图片描述
3、设置变量的作用范围
新定义的变量只在当前shell有效,如果想进入新的shell环境同样有效,就需要使用export命令将变量导出为“全局变量”
这里写图片描述
exit
也可以在export导出全局变量的同时,也可以为变量赋值,例如:
这里写图片描述
4、数值变量的运算
加(+),减(-),乘(*),除(/),求模(%)
这里写图片描述

三、特殊的shell变量

1、环境变量(系统自身就有)
环境变量系统安装好了就存在,不用创建,可以直接使用,查看一下环境变量
这里写图片描述
我们可以把脚本直接添加到$PATH搜索路径中去,这样执行脚本的时候就不用加./了
如:first.sh脚本在 /root目录下
这里写图片描述
2、位置变量(系统自身就有)
位置变量也称之为位置参数,使用$1,$2,$3,$4…..$9表示
这里写图片描述
这里写图片描述
这里写图片描述
3、预定义变量(系统自身就有)
$#(表示命令行中位置参数的个数)
$*(表示所有位置参数的内容)
$?(表示前一个命令执行后的返回状态,返回值为0表示执行正确,非0表示出现异常)
$0(表示当前执行的脚本或程序的名称)
如:编写一个备份的小脚本
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

四、综合案例

1、实验目标:远程备份mysql服务器的数据库
2、实验环境:
一共2台mysql服务器A和B,在B上远程备份A上的数据库,在A上建立数据库benet和accp,两台主机关闭防火墙。
这里写图片描述
1、在服务器端A上创建两个数据库,分别benet和accp
这里写图片描述
2、在服务器端A上建立一个专用的数据库用户,这里我使用root账户,授予root账户对可以通过远程主机192.168.1.200连接A
这里写图片描述
(3) 在备份主机B上备份测试,查看是否备份成功。
这里写图片描述
(4) 在备份主机B上编写脚本,之前需要创建备份目录 mkdir -p /opt/beifen,然后编写脚本。
vim mysqlbak.sh
这里写图片描述
3、设置x的权限,并执行备份脚本./mysqlbak.sh
(6) 查看备份结果
这里写图片描述
4、设置计划任务mv mysqlbak.sh /opt/beifen
crontab -e
这里写图片描述

五、

1、需求描述:
编写登录欢迎脚本welcome.sh
编写服务控制脚本start、stop、status
2、实现思路:
新建脚本程序welcome.sh,依次报告各种系统信息
修改配置文件~/.bash_profile,调用welcome脚本
新建脚本程序/root/bin/status,通过$1获取服务名称,并执行/etc/init.d/目录下的同名脚本

答案:
一、登录欢迎脚本welcome.sh
(1)vi welcome.sh
这里写图片描述
(2)设置x的权限
这里写图片描述
(3)修改/root/.bash_profile文件,在root用户每次登录系统时调用welcome.sh脚本程序
vi /root/.bash_profile添加一行如下内容:
这里写图片描述
(4)验证:使用root用户重新登录,验证欢迎脚本的输出信息
这里写图片描述
二、编写服务控制脚本start
(1)在/root下创建一个bin目录
mkdir -p /root/bin
(2)在/root/bin下,编写一个脚本status.sh
vi status.sh
这里写图片描述
(3)测试脚本
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_40084074/article/details/82495055