1. 什么是shell
命令解释器, 用来翻译用户输入的指令给内核,内核驱动硬件,硬件返回给内核,内核面板通知
1. 1 shell 的执行方式
- 交互式:输入一条,返回一条
- 非交互式:需要执行的命令写入一个文件中,然后去执行这个文件,所有任务完成
2. 什么是shell 脚本
- 将系统命令堆积在一起, 顺序执行 (简称: 系统命令堆积)
- 特定的格式 + 特定的语法 + 系统的命令 = 文件 ---> shell脚本
3. shell脚本能做什么
4. 学习shell 脚本需要哪些预备知识,如何才能学完shell脚本
- 熟练使用vim编辑器
- 熟练使用linux 命令
- 熟练使用linux 三剑客
如果对命令使用不够熟练,对基本服务不能手动大剑,那么一定学不会shell
如何学好shell脚本
基础命令+基础服务+经常练习+ 思路
5. shell脚本编写规范,shell脚本执行方式
- 脚本存放固定目录/scripts
- 开头加#!/bin/bash 作用:告诉脚本使用的是哪种命令解释器。如不指shell,默认以bash执行。
- 附带作者及版权信息
- 脚本扩展名为*.sh
- 脚本中尽量不使用中文
- 成对的符号一次书写完成
- 循环格式一次性输入完成
6. 解释器加与不加的区别 (# !/bin/bash)
bash shell_01.sh 使用bash运行脚本
./bash shell_01.sh 直接执行脚本
. / 方式执行,系统会读取第一行声明的解释器,如果不加,linux系统默认使用bash,如果脚本不是bash可执行的命令,就会报错
Centos 6 !/bin/bash
Centos 7 !/usr/bin/bash
补充:如何让Vim编辑器自动显示行号
vim /etc/vimrc
在最后一行加入 set number
wq 保存退出
7. Shell 脚本变量
7.1 什么是变量
变量是shell传递数据的方法,简单理解,就是用一个固定的字符串,表示一个不固定的值
7.2变量命名规范
变量定义时建议使用:大写字母、小写字母、下划线几个组成 {变量名最好具备一定的含义}
不要出现数字开头:
可以使用如下的方式:
HostName=
cpu_load_ava_1=1
cpu_load_ava_5=2
cpu_load_ava_15=3注意: 等号是复制,需要注意,等号两边不能有空格,其次,定义的变量不要与系统的命令出现冲突
7.3 shell定义变量的方式
- 用户自定义变量:人为定义变量名称
自己设定的变量
- 系统环境变量:保存的是和系统操作
系统设置好的,可以直接调用
位置参数变量:位置参数变量,变量名不能自定义,变量作用也是固定
预定义的变量:是Bash中已经定义好的变量,变量不能自定义,变量作用也是固定的
8. Shell 变量实践
8.1 用户自定义变只在当量前shell 有效
定义变量 变量名=变量值 不能出现 " - " 命名
想要多个窗口都读到变量,设置为全局变量就可以想要在系统生效,必须写入配置文件/etc/profile
**8.2 **
引用变量,$变量名
var_1=a1b2
echo $var_1
a1b2
8.3 查看变量
查看变量,set显示所有变量,包括自定义变量和环境变量
8.4 取消变量,作用范围:仅在当前shell中有效
8.5 shell中 单引号与双引号的区别
什么时候使用双引号
- 字符串出现空格的情况需要双引号将其作为一个整体
- 如果内容中有命令、变量等,会先把变量、命令解析出结果,然后输出最终内容。
什么时候使用单引号
- 所见即所得,单引号中是什么就输出什么
- 单引号会解析引号中的变量
9. 系统环境变量
系统环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录(HOME)、邮件存放位置(MAIL)等
查看系统环境变量
export
9.1 常见系统变量
- 用户的家目录: $HOME
- 当前主机名是: $HOSTNAME
- 当前所在目录: $PWD
- 当前连接信息: $SSH_CONNECTION
9.2 自定义系统环境变量
export var_3=a1 定义系统环境变量 ,注意不要加上$符号
9.3 预定义变量
Bash中已经定好的变量,名称不能自定义,作用也是固定的
$0:当前脚本的文件名
$n:第n个参数 第0个参数为文件名称
$#:参数个数
$*:所有的参数 在一块内存中,空格间隔
$@:所有的参数 申请n个空间,分别存放
$?:上次命令执行的返回值
用处
$n:在判断用户输入的位置参数是什么
$#:判断参数个数
$?:判断命令执行结果
$* 和 $@的区别
不加引号时,二者都是返回传入的参数
加了引号后,
$* 把参数作为一个字符串整体(单字符串)返回
$@ 把每个参数作为一个一个的字符串进行返回