目录
前言
Linux维护时,会有大量重复性的输入和交互操作,费时费力,而且容易出错,那么编写一个恰到好处的shell脚本,
可以为管理员减轻压力。
一、shell介绍
Linux系统中的Shell是一个特殊的应用程序,它介于操作系统内核与用户之间,负责解释命令行,充当了一个“命令
解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结
果。常见的Shell 解释器程序有很多种,使用不同的Shell时,其内部指令、命令行提示符等方面会存在一些区别。通
过/etc/shells文件可以了解当前系统所支持的 She11 脚本种类。
[root@kang ~]# cat /etc/shells
/bin/sh #是bash命令的软链接(已经被/bin/bash所替换)
/bin/bash #基准于GNU的框架下发展出的She1l
/usr/bin/sh #已经被bash所替换。
/usr/bin/bash #centos和redhat系统默认使用bash shell
16/bin/tcshcsh的增强版,与csh完全兼容整合了csh,提供更多的功能
/bin/tcsh #已经被/bin/bash所替换(整合C shell提供更多的功能)
注:nologin奇怪的shel1,这个she11可以让用户无法登录主机。
bash(/bin/bash)是目前大多数Linux版本采用的默认Shell
系统上合法的shell要写入/etc/shells这个文件,因为系统某些服务在运行过程中,会去检查用户能够使用的shells,
而这些shel1的查询就是借由/etc/she11s这个文件。
流行的shell有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特点以及用途。目前大多数Linux系统默认使
用的是bash shell,默认登陆shell是/bin/bash,这个shell是针对用户而言的,可以查看/etc/passwd里面的最后的字段使
用的是哪个shell,如果想要修改可以用chmod -s或者chsh -s来重新指定。
二、shell脚本简介
1、shell脚本概念
shell脚本(Shell Script)就是将要执行的命令按顺序保存到一个文本文件,并给该文件可执行权限,方便一次性执
行的一个程序文件。
2、shell脚本使用环境
◆需要完成大量复杂、重复性的工作时;
◆交互性任务;
◆批量事务处理;
◆服务运行状态监控;
◆定时任务执行等;
◆自动化完成软件的安装部署,如安装部署LAMP架构服务;
◆自动化完成系统的管理,如批量添加用户;
◆自动化完成备份,如数据库定时备份;
◆自动化的分析处理,如网站访问量。
3、shell脚本编写规范
一个合格的shell脚本程序应该遵循标准的脚本结构,而且能够输出友好的提示信息、更加容易读懂,以及必要的注
释文字。
◆脚本声明:#!/bin/bash
◆注释信息: #命令说明
◆可执行语句:正确格式的命令
4、shell脚本执行方式
①、不需要执行权限就可以执行脚本文件的三种方式:sh、bash和source
[root@kang mytext]# bash first.sh #新开一个shell环境运行脚本
大家好!大家好!!
[root@kang mytext]# source first.sh #当前环境运行脚本(与点相同,也可以用“.”执行)
大家好!大家好!
[root@kang mytext]# sh first.sh #新开一个shell环境运行脚本
大家好!大家好!
[root@kang mytext]# bash first.sh ##bash和sh的区别如下
first.sh:行10: +: 语法错误: 期待操作数 (错误符号是 "+")
xxx
/boot
-rwxr-xr-x. 1 root root 5.7M 8月 11 04:25 vmlinuz-0-rescue-9d6459c912ec485fb9941cc4a4afb448
-rwxr-xr-x. 1 root root 5.7M 8月 23 2017 vmlinuz-3.10.0-693.el7.x86_64
[root@kang mytext]# sh first.sh
first.sh:行10: +: 语法错误: 期待操作数 (错误符号是 "+")
[root@kang mytext]# bash -x first.sh #可以逐行执行排错
first.sh:行10: +: 语法错误: 期待操作数 (错误符号是 "+")
+ echo xxx
xxx
[root@kang mytext]# bash -n first.sh #可以指出错误地方
注意:当执行脚本遇到错误时,bash遇到错误会继续将整个脚本执行;而sh遇到错误会结束运行脚本。
②、当前路径与相对路径下执行脚本需要更改文件权限
[root@kang mytext]# /mytext/first.sh
大家好!大家好!
[root@kang mytext]# ./first.sh
大家好!大家好!
5、shell脚本具有可执行权限
[root@kang mytext]# chmod +x first.sh #给这个脚本文件添加x权限
[root@kang mytext]# chmod -x first.sh #给这个脚本文件取消x权限
三、重定向与管道
Shell环境中的两个I/O操作:管道 、重定向。
1、管道操作
管道(pipe)操作为不同命令之间的协同工作提供了一种机制,位于管道符号”|“左侧的命令输出的结果,将作为右侧
命令的输入(处理对象),同一行命令中可以使用多个管道。在She11脚本应用中,管道操作通常用来过滤所需要的关键信
息。
[root@kang ~]# grep "/bin/bash$" /etc/passwd | awk -F: '{print $1,$7}'
root /bin/bash
kl /bin/bash
[root@kang ~]# #“-F”用来指定分隔符号(未指定时,默认以空格或制表符分隔);
#awk命令作用是以冒号“:”作为分隔,输出第一行和第七行区域的字符串。
[root@kang ~]# df -hT | grep "/$" | awk '{print $6}'
23%
[root@kang ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda3 xfs 36G 7.9G 28G 23% /
devtmpfs devtmpfs 897M 0 897M 0% /dev
tmpfs tmpfs 912M 0 912M 0% /dev/shm
tmpfs tmpfs 912M 9.0M 903M 1% /run
tmpfs tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 xfs 950M 179M 772M 19% /boot
tmpfs tmpfs 183M 36K 183M 1% /run/user/0
/dev/sr0 iso9660 4.3G 4.3G 0 100% /mnt
[root@kang ~]#
2、重定向
重定向:在实际的Linux系统维护中,可以改变输入、输出内容的方向,而不使用默认的标准输入、输出设备(键盘
和显示器),这种操作称为“重定向”。
⑴、交互式硬件设备
用户通过操作系统处理信息的过程中,包括以下几类交互设备文件。
◆标准输入(STDIN):默认的设备是键盘,文件编号为0,命令将从标准输入文件中读取在执行过程中需要的输入数
据。
◆标准输出(STDOUT):默认的设备是显示器,文件编号为1,命令将执行后的输出结果发送到标准输出文件。
◆标准错误(STDERR):默认的设备是显示器,文件编号为2,命令将执行期间的各种错误信息发送到标准错误文
件。
注:从键盘接收用户输入的各种命令字串、辅助控制信息,并将命令结果输出到屏幕上;如果命令执行出错,也会
将错误信息反馈到屏幕上。
交互式硬件设备 |
|||
类型 |
设备文件 |