SHELL编程之基础知识及变量的定义
SHELL编程涉及的知识面很广,要想系统的学习SHELL编程,我们需要一步一步地走,坚持下去定会有收获。
-
① Shell的基本语法结构
如:变量定义、条件判断、循环语句(for、until、while)、分支语句、函数和数组等;
② 基本正则表达式的运用;
③ 文件处理三剑客:grep、sed、awk工具的使用;
④ 使用shell脚本完成一些较复杂的任务,如:服务搭建、批量处理等。
-
本篇目标
- 熟练掌握shell变量的定义和获取(重点)
- 能够进行shell简单的四则运算
一、SHELL介绍
前言:
计算机只能识别机器语言(0和1),如(11000000 这种)。但是,我们的程序猿们不能直接去写01这样的代码,所以,要想将程序猿所开发的代码在计算机上运行,就必须找"人"(工具)来翻译成机器语言,这个"人"(工具)就是我们常常所说的编译器或者解释器。
1. 编程语言分类
- 编译型语言:
程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++
- 解释型语言:
程序不需要编译,程序在运行时由解释器翻译成机器语言,每执行一次都要翻译一次。因此效率比较低。比如Python/JavaScript/ Perl /ruby/Shell等都是解释型语言。
- 总结
编译型语言比解释型语言速度较快,但是不如解释型语言跨平台性好。如果做底层开发或者大型应用程序或者操作系开发一般都用编译型语言;如果是一些服务器脚本及一些辅助的接口,对速度要求不高、对各个平台的兼容性有要求的话则一般都用解释型语言。
2. shell简介
总结:
- shell就是人机交互的一个桥梁
- shell的种类
[root@localhost zhangjm]# cat /etc/shells
/bin/sh #是bash的一个快捷方式
/bin/bash #bash是大多数Linux默认的shell,包含的功能几乎可以涵盖shell所有的功能
/sbin/nologin #表示非交互,不能登录操作系统
/bin/dash #小巧,高效,功能相比少一些
/bin/tcsh #是csh的增强版,完全兼容csh
/bin/csh #具有C语言风格的一种shell,具有许多特性,但也有一些缺陷
思考:终端和shell有什么关系?
terminal意思是终端,终端包括PC上的键盘、鼠标等设备,举个例子:linux上面的terminal(对的,就是你输入指令的那个黑色框框)就是一个仿真终端,你可以把它当作一个模拟的输入设备。
而shell是壳程序,shell其实就是一个解释器,它负责接收你的输入,通过它可以与操作系统交互,你在终端输入的指令就是被shell接收的。shell是包裹在操作系统外层的一道程序,就好像是操作系统的壳,shell(壳)的名称也由此而来。
3. shell脚本
(一)什么是shell脚本?
- 一句话概括
简单来说就是将需要执行的命令保存到文本中,按照顺序执行。它是解释型的,意味着不需要编译。
- 准确叙述
若干命令 + 脚本的基本格式 + 脚本特定语法 + 思想= shell脚本
(二)什么时候用到脚本?
重复化、复杂化的工作,通过把工作的命令写成脚本,以后仅仅需要执行脚本就能完成这些工作。
(三)shell脚本能干啥?
①自动化软件部署 LAMP/LNMP/Tomcat…
②自动化管理 系统初始化脚本、批量更改主机密码、推送公钥…
③自动化分析处理 统计网站访问量
④自动化备份 数据库备份、日志转储…
⑤自动化监控脚本
(四)如何学习shell脚本?
- 尽可能记忆更多的命令(记忆命令使用功能和场景)
- 掌握脚本的标准的格式(指定魔法字节、使用标准的执行方式运行脚本)
- 必须熟悉掌握脚本的基本语法(重点)
(五)学习shell脚本的秘诀
多看(看懂)——>模仿(多练)——>多思考(多写)
(六)shell脚本的基本写法
1)脚本第一行,魔法字符**#!**指定解释器【必写】
#!/bin/bash
表示以下内容使用bash解释器解析
注意:
如果直接将解释器路径写死在脚本里,可能在某些系统就会存在找不到解释器的兼容性问题,所以可以使用:#!/bin/env 解释器
2)脚本第二部分,注释(#号)说明,对脚本的基本信息进行描述【可选】
#!/bin/env bash
# 以下内容是对脚本的基本信息的描述
# Name: 名字
# Desc:描述describe
# Path:存放路径
# Usage:用法
# Update:更新时间
#下面就是脚本的具体内容
commands
...
3)脚本第三部分,脚本要实现的具体代码内容
(七)shell脚本的执行方法
- 标准脚本执行方法(建议)
1) 编写人生第一个shell脚本
[root@localhost tmp]# vim first_shell.sh
[root@localhost tmp]# cat first_shell.sh
#!/bin/env bash
#name: 名字
# Desc:描述describe
# Path:存放路径
# Usage:用法
# Update:更新时间
#下面就是脚本的具体内容
echo "hello world"
echo "hello world"
2) 脚本增加可执行权限
[root@localhost tmp]# chmod +x first_shell.sh
3) 标准方式执行脚本
[root@localhost tmp]# pwd
/tmp
[root@localhost tmp]# /tmp/first_shell.sh
hello world
hello world
[root@localhost tmp]# ./first_shell.sh
hello world
hello world
注意:标准执行方式脚本必须要有可执行权限。
- 非标准的执行方法(不建议)
- 直接在命令行指定解释器执行
[root@MissHou shell01]# bash first_shell.sh
[root@MissHou shell01]# sh first_shell.sh
[root@MissHou shell01]# bash -x first_shell.sh
+ echo 'hello world'
hello world
+ echo 'hello world'
hello world
+ echo 'hello world'
hello world
-x:一般用于排错,查看脚本的执行过程
-n:用来查看脚本的语法是否有问题
- 使用
source
命令读取脚本文件,执行文件里的代码
[root@MissHou shell01]# source first_shell.sh
hello world
hello world
hello world
**小试牛刀:**写一个木有灵魂的脚本,要求如下:
-
删除/tmp/目录下的所有文件
-
然后在/tmp目录里创建3个目录,分别是dir1~dir3
-
拷贝/etc/hosts文件到刚创建的dir1目录里
-
最后打印"报告首长,任务已于2019-05-05 10:10:10时间完成"内容
echo "报告首长,任务已于$(date +'%F %T')"
[root@localhost shell]# cat test.sh
#!/bin/env bash
rm -rf /tmp/*
mkdir /tmp/dir1
mkdir /tmp/di