Shell脚本基础简述
一、shell的定义
1.1、shell的基本概念
shell:介于系统内核与用户之间,负责解释命令行
1.2、shell脚本的应用
(1)重复性操作
(2)交互性任务
(3)批量事务处理
(4)服务运行状态监控
(5)定时任务执行
二、shell的格式
2.1、编辑脚本的规则
(1)使用vim文本编辑器
(2)每行一条Linux命令,按执行顺序依次编写
(3)第一行为"#!/bin/bash",脚本申明(默认解释器)∶表示此行以下的代码语句是通过/bin/bash程序来执行。还有其他类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect。
(4)注释信息:以"#”开头的语句表示为注释信息,被注释的语句在脚本运行时不会被执行可执行语句:如echo命令,用于输出" "之间的字符串。
2.2、脚本的运行方法
指定路径执行(需要有执行权限)
相对或者绝对路径下系统会创建一个子shell环境,并在这个子shell环境中执行这个脚本
当前目录为opt ./代表本目录使用相对路径执行脚本
/opt/my.sh使用绝对路径执行脚本
指定解释器执行(不需要执行权限)
bash(sh)执行脚本, 系统会创建一个子shell环境,并在这个子shell环境中执行这个脚本 ,脚本执行结束后系统就会自动退出bash环境
## 不建议使用source 与 . 执行脚本 会在当前 shell 环境中执行脚本 影响当前环境
2.3、脚本运行的错误
(1)命令错误:命令出错不会影响接下来的命令继续
(2)语法错误:会影响接下来的命令继续
(3)逻辑错误:只能自己去筛查
调试脚本错误
- 检查语法错误:bash -n 脚本名称 (不在当前目录下加绝对路径)
- 检查逻辑错误:bash -x 脚本名称 (不在当前目录下加绝对路径)
三、shell的变量
3.1、shell变量简述
shell变量的作用
(1)用来存放系统和用户需要使用的特定参数(值)
(2)变量名:使用固定的名称,由系统预设或用户定义
(3)变量值:能够根据用户设置、系统环境的变化而变化
shell变量的分类
(1)自定义变量:由用户自己定义、修改和使用
(2)特殊变量:环境变量、只读变量、位置变量、预定义变量
3.2、整数变量的计算
运算符:+ 加法
、- 减法
、* 乘法
、/除法
、% 取余
管道符方式
[root@localhost ~]# echo 2+4 |bc 6
expr不可计算小数,并且变量和运算符之间需要空格分隔
[root@localhost ~]# expr 1 + 10 11
整数乘法计算 需要 \转义符
[root@localhost ~]# expr 15 \* 24 360
取余
[root@localhost ~]# expr 19 % 3 1 [root@localhost ~]# expr 18 % 3 0
随机数
[root@localhost ~]# expr $[RANDOM % 45 + 1] 27 [root@localhost ~]# expr $RANDOM % 12 5l
let
[root@localhost ~]# s=150 [root@localhost ~]# b=100 [root@localhost ~]# z=0;let z=s+b;echo $z 250
i++和++i
[root@localhost ~]# j=1;i=1;let j=i++;echo $j $i 1 2 [root@localhost ~]# j=1;i=1;let j=++i;echo $j $i 2 2
3.3、环境变量
环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或多个应用程序将使用到的信息。Linux是一个多用户的操作系统,每个用户登录系统时都会有一个专用的运行环境,通常情况下每个用户的默认的环境都是相同的。这个默认环境就是一组环境变量的定义。每个用户都可以通过修改环境变量的方式对自己的运行环境进行配置。
[root@localhost ~]# echo $USER 查看环境 root [root@localhost ~]# echo $LANG zh_CN.UTF-8 [root@localhost ~]# echo $BASH /bin/bash [root@localhost ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
3.4、位置变量
当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。
$n:n为数字,$0代表命令本身,1~9代表第一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为 ${10}
1 [root@localhost ~]# vim go.sh 2 3 #!/bin/bash 4 echo $1 5 echo $2 6 echo $3 7 echo $4 8 echo $3 + $4 9 echo $2 + $3 10 11 [root@localhost ~]# sh go.sh 10 20 30 30 12 10 13 20 14 30 15 30 16 17 30 + 30 18 20 + 30 19
3.5、预定义变量
(1)$*、$@:表示命令或脚本要处理的参数。
(2) $*:把所有参数看成以空格分隔的一个字符串整体,代表"$1 $2 $3 $4"。
(3) $@:把各个参数加上双引号分隔成n份的参数列表,每个参数是独立 的,代表"$1" "$2" "$3" "$4"。
(4)$0:表示当前执行的脚本或命令的名称。
(5)$#:表示命令或脚本要处理的参数的个数。
(6)$?:表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。也常被用于Shell脚本中return退出函数并返回的退出值。
四、重定向
4.1、交互式硬件设备
(1)标准输入:从该设备接收用户输入的数据
(2)标准输出:通过该设备向用户输出数据
(3)标准错误:通过该设备报告执行出错信息
4.2、重定向操作