1、基础知识
什么是shell?
功能定位
在计算机科学中,Shell就是一个命令解释器。 shell是位于操作系统和应用程序之间,是他们二者最主要的接口,shell负责把应用程序的输入命令信息解释给操作系统,将操作系统指令处理后的结果解释给应用程序。
- 一句话,shell就是在操作系统和应用程序之间的一个命令翻译工具。
分类
类型 | 说明 |
---|---|
图形界面shell | 图形界面shell就是我们常说的桌面 |
命令行式shell | windows系统:cmd.exe 命令提示字符 linux系统:sh / csh / ksh / bash / … |
我们常说的shell是命令行式的shell,在工作中常用的是linux系统下的bash。
查看效果
查看当前系统的shell类型(打开Ubuntu的终端其实就是默认在/bin/bash环境下)
echo $SHELL
查看当前系统环境支持的shell
更改默认的shell(执行完需重启Ubuntu才能生效)
chsh <用户名> -s <新shell>
shell的使用方式
- 手动方式:即在终端界面,输一行命令,运行一行命令
- 脚本方式:将命令写入脚本文件,批量执行(自上而下)
shell脚本文件(以1.sh脚本文件为例)的三种执行方式
1 #!/bin/bash
2 # 第一行注释表示声明当前脚本运行使用的解释器
4 ls
5 pwd
6 whoami
7
- 1、显示指定的解释器运行
/bin/bash 1.sh
- 2、直接运行脚本
./ 1.sh
前提:脚本文件有可执行权限,和脚本文件中声明执行的解释器
python@ubuntu:~/Desktop/data$ ./1.sh
1.sh
/home/python/Desktop/data
python
- 3、使用
source
或.
的方式运行脚本source 1.sh
. 1.sh
注意:脚本文件执行使用的解释器的优先级——就是上述的1——3的顺序
shell脚本的注释方式
- 单行注释: # 号开头
- 多行注释:
:<<
+ 一对边界符号(//、$$、!! 都行)
:<<$
...
...
$
1.3 变量基础
分类
shell 中的变量分为三大类:
分类 | 作用 |
---|---|
本地变量 | 变量名仅仅在当前终端有效 |
全局变量(环境变量) | 变量名在当前操作系统的所有终端都有效 |
shell内置变量 | shell解析器内部的一些功能参数变量 |
1.4、变量详解
常用方式,打印变量
1.4.1、本地变量
(1)普通变量
1 #!/bin/bash
2 # 第一行注释表示声明当前脚本运行使用的解释器
3
4 name=cfw
5
6 # 如果变量值有空格,必须加双引号,不能加单引号
7 content="my name is $name"
8
9 echo $name
(2)命令变量
命令(常指linux命令)变量的定义方式有如下两种
类型 | 样式 | 特点 |
---|---|---|
反引号 | 变量名=命令 | 反引号 |
小括号 | 变量名=$(命令) | $() |
执行流程:
①将命令用反引号括起来,保存到一个变量中
python@ubuntu:~/Desktop/data$ name=`whoami`
python@ubuntu:~/Desktop/data$ echo $name
python
②将命令用括号括起来,保存到一个变量中
python@ubuntu:~/Desktop/data$ name=$(whoami)
python@ubuntu:~/Desktop/data$ echo $name
python
(3)环境变量(全局变量)
概念:在当前系统的所有环境下都能生效的变量,可以用env
命令查看系统所有的环境变量
作用:
- 给应用程序的运行,提供一些必要的参数
- 方便各个脚本文件之间进行传值
三种位置定义环境变量:
-
(1)在终端中定义
export 变量=值
-
(2)在脚本文件中定义
export 变量=值
,
定义完需使用source <脚本文件>
或者. <脚本文件>
运行后才能生效【注意:使用/bin/bash <脚本文件>
执行不会生效】 -
(3)在隐藏文件
.bashrc
中定义,定义完需要和上面一样source
运行一下(或者重启终端),可以在所有终端生效。上面两种方式只是在当前终端生效。
第三种方法示例:
将自己写的一个脚本配置到环境变量。以后我们在任意一个路径下都可以直接输入redis.sh
进行执行。
补充:取消一个变量unset 变量名
(4)内置变量
属性含义
符号 | 意义 | 符号 | 意义 |
---|---|---|---|
$0 | 获取当前脚本文件名 | $n | 获取脚本的第n个参数值 |
$# | 获取脚本参数的总个数 | $? | 获取上一个指令的状态返回值(0为成功,非0为失败) |
1.4.5、变量计算
shell脚本的变量都是字符类型,但也支持简单的整数运算。
# 方案一:let语法
num1=100
num2=200
let num3=num1+num2
# 方案二:$(())语法
num3=$((num1+num2))