1.Shell概述
1.1 Shell简介
- Shell是一个命令解释器,它的作用是解释执行用户输入的命令及程序等,用户每输入一条命令,Shell就解释执行一条。这种从键盘一输入命令,就可以立即得到回应的对话方式,称为交互的方式。
- Shell存在于操作系统的最外层,负责与用户直接对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,然后输出到屏幕返回给用户。简单来说Shell就是一个用户跟操作系统之间的一个命令解释器。
- Shell是用户与Linux操作系统之间沟通的桥梁。用户可以输入命令执行,又可以利用shell脚本编程去运行。
1.2 Shell脚本
当命令或程序语句不在命令行下执行,而是通过一个程序文件来执行,按照顺序执行。该程序就被称为Shell脚本。Shell脚本类似于DOS系统下的批处理程序。
1.3 Shell分类
[root@Centos7 ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
echo $BASH可以查看到当前登录的shell
1.4 Shell脚本开发的基本规范
1.Shell脚本的第一行是指定脚本解释器。
其中,开头的“#!”字符又称为幻术,在执行shell脚本的时候,内核会根据“#!”后的解释器来确定该用那个程序解释这个脚本的内容。一个规范的Shel脚本在第一行会指出由那个程序(解释器)来执行脚本中的内容。如#!/bin/bash。
2.Shell脚本的开头会加版本、版权等信息
#Date 22:55 2020-3-12
#Author Create by ww
Blog:http://***.com
#Description:This scripts functions is....
#Verson:1.1
1.5 Shell注释
在shell中以#开始表示,整个行就被当作一个注释,不会被程序执行。
1.6 SHELL脚本的执行
先准备一个测试文件,往里面写入内容。
[root@CentOS7 ~]# echo "echo 'hello'" > test.sh
1.6.1 bash script-name或sh script name
这是当脚本文件本身没有可执行权限或者脚本文件开头没有指定解释器时需要使用的方法。
1.6.2 path/script-name或./script-name
指在当前路径下执行脚本(脚本需要有执行权限),具体方法为chmod +x script-name。然后通过绝对路径或相对路径就可以直接执行脚本。
1.6.3 source script-name或. script-name
使用source或“.”读入或加载指定的shell脚本文件,然后依次执行指定的shell脚本文件种的所有语句。这些语句将在当前父shell脚本进程种运行。使用source或.执行脚本时,不会创建子进程,而是在父进程中直接执行。
1.6.4 sh<script-name或cat script-name | sh
2.shell变量
Shell给一个变量赋值,实际就是定义了变量。变量的赋值方式为:先写变量名称,然后是“=”这个字符,最后是值,中间无任何空格,变量的内容一般要加双引号,防止出错,特别是当值内容之间有空格时。要使用变量的值是,在变量名前面加上$符号。
2.1 强引用和弱引用
被一对双引号括起来的变量替换是不会被阻止的,双引号被称为弱引用或部分引用;被一对单引号括起来的变量就会被禁止,变量名只会被解释成字面的意思,不会发生变量替换,单引号被称为强引用或全引用;反引号和$()一样,引号或括号里得命令会优先执行,如果存在嵌套,反引号不能用。
2.2 变量的设置规则
- 变量名只能使用英文字母,数字或下划线,且首字母不能以数字开头。
- 等号=用于为变量分配值,在使用过程中等号两边不能有空格。
- 变量名区分大小写。
- 要对变量进行引用,可以在变量名前加$美元符。
- 变量中间不能有空格,可以使用下划线(_)。
2.3 变量类型
2.3.1 本地变量
当前用户自定义的变量,当前进程中有效,其他进程及当前进程的子进程无效。
[root@Centos7 ~]# a=123
[root@Centos7 ~]# echo $a
123
[root@Centos7 ~]# su - ycy
Last login: Tue Sep 24 22:42:37 CST 2019 on pts/0
[ycy@Centos7 ~]$ echo $a
2.3.2 环境变量
当前进程有效,并且能够被子进程调用。su -切换用户之后不生效。变量名通常要大写。
env:查看当前用户的环境变量
export:用于设置环境变量。修改后维持不变,直到当前shell消亡。
set:查询当前用户的所有变量(临时变量与环境变量)
declare:输出所有的变量、函数、整数和已经到处的变量。
设置PATH环境变量
shell要执行一个程序,它要在系统中去搜索这个程序的路径,PATH变量是用来定义bash查找命令的目录。当我们安装了第三方程序后,可以把第三方程序bin目录添加到这个PATH路径内,就可以在全局调用这个第三方程序。
定义一个环境变量:export name=value或者name=value; export name或者declare -x name=value
[root@CentOS7 ~]# echo "export PATH=/opt/:$PATH" >> /etc/profile
[root@CentOS7 ~]# source /etc/profile
2.3.3 全局变量
全局所有的用户和程序都能够调用且继承,新建的用户也能默认调用。
文件名 | 说明 | 备注 |
---|---|---|
$HOME/.bashrc | 当前用户的bash信息,用户登录时读取 | 定义别名、umask、函数等 |
$HOME/.bash_profile | 当前用户的环境变量,用户登录时读取 | |
$HOME/.bash_logout | 当前用户退出当前shell时最后读取 | 定义用户退出时执行的程序等 |
/etc/bashrc | 全局的bash信息,所有用户都生效 | |
/etc/profile | 全局环境变量信息 | 系统和所有用户都生效 |
$HOME/.bash_history | 当前用户的历史记录 |