一、shell 脚本基础
-
shell 的作用和特点
- 作用:shell 接收用户的指令,翻译后提交给 CPU 执行。
- 特点:工作在内核和用户之间,接收用户数据命令,提交给 CPU 判断执行,并反馈执行结果。在 Linux 系统中使用 bash 接收用户输入指令。
-
shell 脚本的组成
- 声明使用的解释器为 bash,如
#!/bin/bash
。 - 写注释信息,对脚本进行功能描述。
- 提供脚本作者联系方式,以便在使用脚本时发现问题能方便联系作者。
- 包含脚本执行命令,这些命令从上到下严格执行。
- 声明使用的解释器为 bash,如
-
编写测试脚本和脚本执行方式
- 编写测试脚本:使用命令
[root@centos01 ~]# vim./ls.sh
创建脚本,脚本内容如#!/bin/bash
、#Phone 1316195981
、#列出目录内容
、echo "查看所在目录:"
、cd /boot/
、pwd
、echo "显示文件内容:"
、ls -lh vml*
。 - 脚本执行的方式:
sh
:不需要脚本添加执行权限,可直接执行。source
:进入脚本内部执行命令,不需要执行权限。./脚本名字
:执行脚本需要脚本拥有执行权限。
- 编写测试脚本:使用命令
-
脚本的管道符和重定向
- 脚本的重定向方式:
- 标准输入:用数字 0 表示,从键盘接收输入的内容。
- 标准输出:用数字 1 表示,键盘输入内容显示到显示器或者文件中。
- 标准错误:用数字 2 表示,脚本执行的错误信息显示在屏幕上。
- 重定向的操作符号:
<
:从指定文件读取数据。>
:重定向输出,后执行的会覆盖先执行的内容。>>
:重定向追加,不会覆盖数据。2>
:标准错误输出。2>>
:标准错误追加。&>
:正确或者错误全部接收。
- 管道符:前一个命令执行的结果转交给后一个命令执行。
- 脚本的重定向方式:
-
重定向和管道符的基本使用
- 管道符号使用:例如
[root@centos01 ~]# head -10 /etc/passwd | grep "bash$" | awk -F: '{print $1,$7}'
。 - 重定向的使用:
[root@centos01 ~]# echo "aaa" >./a.txt
:重定向输出。[root@centos01 ~]# echo "ccc" >>./a.txt
:重定向追加输出。[root@centos01 ~]# lsss 2>./error.log
:错误输出。[root@centos01 ~]# ls / &>./1.txt
:混合输出。[root@centos01 ~]# aaaa 2>>./1.txt
:混合追加。
- 管道符号使用:例如
二、环境变量
-
变量的作用和类型
- 作用:提高命令的复用率,减少代码量。
- 类型:
- 自定义变量:由用户创建。
- 环境变量:安装系统时创建设置运行环境。
- 位置变量:在脚本传递参数时使用。
- 预定义变量:用户无法删除和修改。
-
自定义变量的使用
- 定义变量的类型:
- 局部环境变量:只能在当前 bash 环境使用。
- 全局环境变量:在任何 bash 环境中都能使用。
- 变量存储空间:默认保存在内存中。
- 定义环境变量注意事项:可以大写字母开始,中间下划线,结束小写字母;不能以符号开始。
- 定义一个局部环境变量:使用命令
[root@centos01 ~]# a=1
定义变量名字为 a 赋值为 1,然后使用[root@centos01 ~]# echo $a
调用变量名字 a。 - 定义一个全局环境变量:使用命令
[root@centos01 ~]# export b=2
定义全局环境变量 b 赋值 2,然后使用[root@centos01 ~]# echo $b
调用全局环境变量名字 b。
- 定义变量的类型:
-
变量赋值的使用
- 变量赋值的方式:
- 双引号:允许引用环境变量。
- 单引号:禁止引用环境变量。
- 反撇:将命令执行结果赋值给变量。
read -p
:接收用户输入的内容赋值给变量。
- 双引号的使用:使用命令
[root@centos01 ~]# a=benet
定义环境变量 1,[root@centos01 ~]# b=6.0
定义环境变量 2,然后[root@centos01 ~]# benet="$a $b"
调用环境变量 1 和 2 赋值给变量名字 benet,最后使用[root@centos01 ~]# echo $benet
显示变量值。 - 单引号的使用:使用命令
[root@centos01 ~]# accp='$a $b'
,不允许引用变量,当成普通字符串显示,然后使用[root@centos01 ~]# echo $accp
显示变量值。 - 命令执行结果赋值给变量:使用命令
[root@centos01 ~]# head=
head -10 /etc/passwd | grep "bash$" | awk -F: '{print $1,$7}',将命令执行结果赋值给变量 head,然后使用
[root@centos01 ~]# echo $head` 显示变量值。 read -p
接收用户输入内容:使用命令[root@centos01 ~]# read -p "请输入你的名字:" name
接收用户输入的内容赋值给变量 name,然后使用[root@centos01 ~]# echo $name
显示变量值。
- 变量赋值的方式:
-
整数运算
- 运算符:+(加)、-(减)、*(乘)、/(除)、%(求余)。
- 整数运算:使用命令
[root@centos01 ~]# a=20
和[root@centos01 ~]# b=10
定义变量,然后使用[root@centos01 ~]# expr $a + $b
(相加)、[root@centos01 ~]# expr $a \* $b
(相乘)、[root@centos01 ~]# expr $a / $b
(相除)、[root@centos01 ~]# expr $a % $b
(取余)进行整数运算。
-
环境变量
- 系统环境变量存储位置:
/etc/profile
:任意用户都可以使用。~/.bash_profile
:只能当前用户使用。
- 常见的环境变量:
echo $PWD
:查看所在位置。echo $HOME
:查看宿主目录。echo $USER
:当前登录系统用户。echo $SHELL
:使用命令解释器。echo $PATH
:命令所在位置。
- 系统环境变量存储位置:
-
位置变量
- 位置变量使用注意事项:只能传递九个位置变量。
- 使用位置变量:创建脚本
[root@centos01 ~]# vim./sum.sh
,内容为#!/bin/bash
、sum=
expr $1 + $2 + $3、
echo "$1 + $2 + $3 = $sum",然后使用命令
[root@centos01 ~]# sh./sum.sh 10 20 30` 向脚本传递三个参数。
-
预定义变量
- 预定义变量类型:
$#
:统计预定义变量个数。$*
:位置变量内容。$?
:脚本执行状态,0 表示成功,非 0 表示错误。$0
:显示脚本名字。
- 预定义变量使用:创建脚本
[root@centos01 ~]# vim./sum.sh
,内容为#!/bin/bash
、sum=
expr $1 + $2 + $3、
echo "$1 + $2 + $3 = $sum"、
echo "脚本名字、统计变量个数#"、
echo "位置变量$*"、
echo "脚本执行状态 $?",然后使用命令
[root@centos01 ~]# sh./sum.sh 40 50 60执行脚本。
- 预定义变量类型: