Shell概述
Shell(也称为壳层)在计算机科学中指“为用户提供用户界面”的软件,通常指的是命令行界面的解析器。一般来说,这个词是指操作系统中提供访问内核所提供之服务的程序。Shell也用于泛指所有为用户提供操作界面的程序,也就是程序和用户交互的层面。因此与之相对的是内核(英语:Kernel),内核不提供和用户的交互功能。
Shell还是一个功能强大的编程语言,易编写、易调试、灵活性强
- Linux提供的Shell解释器
cat /etc/shells # 查看Shell的解释器
echo $SHELL # 查看Ubuntu默认使用的解释器
Shell脚本入门
- 脚本格式
- 脚本以
#!/bin/bash
开头(指定解释器)
- 第一个Shell脚本:hello.sh
# 创建bin目录,用来存放脚本
cd ~
mkdir bin
cd bin
# 创建hello.sh文件,输出hello
vim hello.sh # 写入下列两行
#!/bin/bash
echo "hello world"
- 脚本的常用执行方式
- 采用bash 或 sh 加脚本的相对路径或绝对路径(不用赋予脚本 +x权限)
- sh + 脚本相对路径/绝对路径
- bash + 脚本相对路径/绝对路径
- 采用输入脚本的决定路径或相对路径执行脚本(需要可执行权限 +x)
- 首先赋予脚本权限:
chmod +x hello.sh
- 执行脚本:
./hello.sh
、/home/qingxuly/bin/hello.sh
- 首先赋予脚本权限:
- 注意:
- 第一种执行方式:本质是bash解释器帮你执行脚本,所以脚本本身不需要执行权限。
- 第二章执行方式:本质是脚本需要自己执行,所有需要执行权限。
sh ./hello.sh
bash hello.sh
sh /home/qingxuly/bin/hello.sh
chmod +x hello.sh
./hello.sh
/home/qingxuly/bin/hello.sh
变量
系统预定义变量
- 常用系统变量:HOME、PWD、SHELL、USER
- 获取变量的值
$变量名 # $和变量名之间不能有空格
- 案例实操
echo $HOME # 查看系统变量的值
set # 查看当前Shell中所有的变量
自定义变量
-
基本语法:
- 定义变量:
变量名=变量值
。注意:=号前面不能有空格。 - 撤销变量:
unset 变量名
- 声明静态变量:
readonly 变量
。注意:不能unset。
- 定义变量:
-
变量定义规则
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
- 等号两侧不能有空格。
- 在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
- 变量的值如果有空格,需要使用双引号或单引号括起来。
-
案例实操
A=5 # 定义变量a
echo $A
unset A # 撤销变量a
echo $A
readonly A=10 # 声明静态变量a
unset A # 静态变量不能unset
C=1+2 # bash中,变量默认类型都是字符串类型,无法直接进行数值运算
echo $C
D="hello world" # 变量的值如果有空格,需要使用单引号或双引号括起来
F=ma
export F # 变量提升为全局环境变量,可供其它Shell程序使用
vim niu.sh # 编辑脚本,输入下列两行,:wq保存退出
echo $F
echo $D
sh niu.sh # 执行脚本,$f全局变量可以打印值
特殊变量
1、$n
- 基本语法
$n :n为数字,$0代表该脚本名称,$1- 9 代表第一到第九个参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数需要用大括号包含,如{10}。
- 案例实操
vim parameter.sh # 编辑脚本,输入下列四行,:wq保存退出
#!/bin/bash
echo $0
echo $1
echo $2
echo ${10}
bash parameter.sh hello world 3 4 5 6 7 8 9 10
2、$#
- 基本语法
获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强加班的健壮性
- 案例实操
vim parameter.sh # 编辑脚本,输入下列八行,:wq保存退出
#!/bin/bash
echo '=====$n====='
echo $0
echo $1
echo $2
echo ${10}
echo '=====$#====='
echo $#
# 打印输入参数的个数
bash parameter.sh 1
bash parameter.sh 1 2
3、 ∗ 、 *、 ∗、@
- 基本语法
∗ :代表命令中所有的参数, * : 代表命令中所有的参数, ∗:代表命令中所有的参数,*把所有的参数看成一个整体