前言
Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚本的内容。每一个合格 的Linux系统管理员或运维工程师,都需要能够熟练地编写Shell脚本语言,并能够阅读系统及各类软件附带的Shell脚本内容。只有这样才能提升运维人员的工作效率,适应曰益复杂的工作环境,减少不必要的重复工作,从而为个人的职场发展奠定较好的基础。
一、什么是shell
Shell俗称壳(用来区别于核),是指"为使用者提供操作界面"的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。简而言之,它将人类的指令化为计算机能解读的“二进制”,计算机内核调用shell解读出来的二进制,随后,硬件调用内核执行人类的指令。Linux无法离开shell,换句话说,Linux离开shell则无法正常运行。
二、shell脚本概念
1、将要执行的命令按顺序保存到一个文本文件中
2、给该文件可执行权限
3、可结合各种shell控制语句以完成更复杂的操作
三、shell脚本应用场景
1、重复性操作
2、交互性任务
3、批量事务处理
4、服务运行状态监控
5、定时任务执行
四、shell脚本的功能
1、自动化完成软件的安装部署
如安装部署LAMP架构服务
2、自动化完成系统的管理
如批量添加用户
3、自动化完成备份
如数据库定时备份
4、自动化的分析处理
如网站访问量
五、走进shell
1、用户登陆shell
1.1、登陆后默认使用的shell程序,一般为/bin/bash  1.2、不同shell的内部指令、运行环境等会有所区别 2、shell脚本创建与运行
2.1、第一行”#!/bin/bash”,脚本申明(默认解释器),表示此行以下的代码语句是通过/bin/bash程序执行,还有其他类型的解释器,
2.2、注释信息:以“#”开头的语句表示为注释信息,被注释的语句在脚本运行时不会被执行,注意,尽量不要用中文注释,尽量用英文注释,以防本机切换环境后产生中文乱码的困扰
2.3、可执行语句:如echo 命令,用于输出””之间的字符串
2.4、案例
2.4.1、创建脚本  2.4.2、编辑脚本内容 注意:变量名在取名时,请做到见名知意  2.4.3、权限  2.4.4、第一种解决思路  2.4.5、第二种解决思路  2.4.6、第三种解决思路  2.4.7、第四种解决思路  2.4.8、第五种解决思路 3、重定向与管道操作
3.1、交换式硬件设备 3.2、重定向操作 注意:改变输入、输出方向,不使用默认设备 3.2.1输入 < 从指定的文件读取数据,而不是从键盘输入 --stdin识别标准输入  3.2.2、输出 > 将输出结果保存到指定的文件(覆盖原有内容) 文件不存在,自动创建新文件  3.2.3、>> 将输出结果追加到指定的文件  3.2.4、错误 2> 将错误信息保存到指定的文件  3.2.5、2>> 将错误信息追加到指定的文件中  3.2.6、1.1.1、&> 将标准输出、标准错误的内容保存到同一个文件中  3.3、管道符号 3.3.1将左侧的命令输出结果,作为右侧命令的处理对象 
六、变量的作用和类型
1、变量的作用
1.1、用来存放系统和用户需要使用的特定参数1.1.1、变量名:使用固定的名称,由系统预设或用户定义 1.1.2、能够根据用户设置、系统环境的变化而变化
2、变量的类型
2.1.1、自定义变量:由用户自己定义、修改、使用 2.1.2、特殊变量:环境变量,只读变量、位置变量、预定义变量
3、定义一个新变量
A)格式“变量名=变量值”注意:变量名以字母或下划线开头,区分大小写,建议全大写,名称中不能有特殊字符  B)查看变量的值,使用echo变量名,可同时查看多个变量值,以空格分开
C)双引号:允许通过符号引用其他变量值
D)单引号:禁止引用其他变量值,视为普通字符 E)反撇号:命令替换,提取命令执行后的输出结果   F、换行和空格  G、包来源
七、read命令
1、基本命令
read -p “提示信息” 变量名 可实现简单交互
2、交互式定义变量

3、案例
 
八、export命令
设置变量的作用范围,默认为局部变量,只在当前shell生效
1、格式1:export 变量名 …
2、格式2:export 变量名=变量值 …
3、案例  
九、整数变量的运算
1、常用运算符
1.1、加法运算:+ 1.2、减法运算: - 1.3、乘法运算: * 1.4、除法运算: / 1.5、求模(取余)运算: % 1.6、中括号和小括号 
2、案例:编写一个计算器
 
总结
shell将人类的指令化为计算机能解读的“二进制”,计算机内核调用shell解读出来的二进制,随后,硬件调用内核执行人类的指令。在使用linux编写shell脚本时,首先要明白,脚本都是以.sh结尾,若想调用该脚本,共有5种方法,主要的可以通过修改权限和sh 文件.sh的方式,其次,在重定向中,最容易混淆的就是“>”输出,以及"<"输入,开口向外则为输出,开口向内输入, 输入的意思是从指定的文件读取数据,而不是从键盘输入,而输出将输出结果保存到指定的文件(覆盖原有内容) 文件不存在,自动创建新文件;第三、2>> 将错误信息追加到指定的文件中,注意,此处经常出现在判断语句中,收集报错信息,第四,在使用变量时,单引号是禁止引用变量值,双引号是允许通过变量名调用变量值,反撇号是命令替换,提取命令执行后的输出结果,在循环、case语句中经常使用,第五、若想换行或者空格,请一定不要忘记加 -e 和 \n或者\t;第六、read命令加上-p 或者-s(不显示内容)可实现简单交互,第七:export 可将变量设置为全局变量。
|