shell编程规范与变量
shell脚本概述
shell脚本的概念
将要执行的命令按顺序保存到一个文本文件
给该文件可执行权限
可结合各种shell控制语句以完成更复杂的操作
shell脚本应用场景
重复性操作
交互性任务
批量事务处理
服务运行状态监控
定时任务执行
shell的作用
shell的作用:命令解释器,“翻译官”
介于系统内核与用户之间,负责解释命令行
登录shell
登录后默认使用的shell程序,一般为/bin/bash
不同shell的内部指令,运行环境等会有区别
[root@localhost ~]#cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
最常用的就是bash、tcsh、 csh、sh、 nologin这些shell。这些shell都是依据Linux发展者的不同所创造出的不同版本
bash:基准于GNU的框架下发展出的Shell。
csh: 语法有点类似于c语言的Shell。
tcsh:整合了csh,提供更多的功能。
sh:已经被bash所替换。
nologin: 奇怪的shell,这个shell可以让用户无法登录主机
Shell编程规范
编写脚本代码
使用vim文本编辑器
每行一条Linux命令,按执行顺序依次编写
vim /root/first.sh #使用vim编辑器
#!/bin/bash #脚本解释器声明
this is my first shell-script #注释
echo 当前目录位于: #linux命令
pwd #linux命令
shell脚本的构成
脚本申明(解释器) :若第一行为“#!/bin/bash", 表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin/bash为默认解释器。还有其它类型的解释器,比如#!/usr/bin/python、#!/usr/bin/ expect。
注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行。(shell脚本文件的第一行是个例外,#后面的感叹号会告诉shell用哪个shell来运行脚本)
[root@localhost ~]#vim first.sh 进入文本编辑
用unset对变量进行取消
shell脚本的执行
指定路径的命令,要求文件必须有 x(可执行)权限
chmod +x /root/first.sh #给脚本添加可执行权限
指定绝对路径: /root/first.sh
指定相对路径: ./first.sh
指定shell来解释脚本,不要求文件必须有 x (可执行)权限
sh 脚本路径: sh first.sh
source 脚本路径:. first.sh 或者 source first.sh(会切换到)
shell脚本显示消息
大多数shell命令都会产生自己的输出,这些输出会显示在脚本所运行的控制台显示器上,很多时候,我们需要添加自己的文本消息来告诉执行脚本的用户当前脚本正在做什么。可以通过echo命令来实现这一点,如果在echo命令后面加上一个字符串,该命令就能显示出这个文本字符串
[root@localhost ~]#vim test.sh 进入文本编辑
默认情况下,不需要使用引号就可以将要显示的文本字符串显示出来,但是有时在字符串中出现引号的话就会出现问题了。echo命令可用单引号或者双引号来划定文本字符串,如果在字符串中用到了他们,我们需要在文本中使用其中一种引号,而用另一种来将字符串划定起来
如果想要把文本字符串和命令输出显示在同一行中,可以使用echo语句的 -n
参数
重定向与管道
由于Shell脚本“批量处理”的特殊性,其大部分操作过程位于后台,不需要用户进行干预,因此要学会提取、过滤执行信息变得十分重要,所以我们需要重定向和管道
将管道符号“|”左侧的命令输出的结果,作为右侧命令的输入(处理对象),同- -行命令中可以使用多个管道
ps aux | wc -l #查看进程数
echo “abc123” | passwd --stdin zhangsan #给zhangsan用户设置密码abc123
交互式硬件设备 | 设备文件 | 文件描述编号 | 默认设备 |
---|---|---|---|
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
将111111重定向输出到pass.txt文件中,然后将pass.txt的内容重定向输入给用户李二狗的密码
下面来混合起来使用:
本来1—>屏幕 ( 1指向屏幕)
执行>log后,1–>1og.txt (1指向log. txt)
执行2>&1后,2–>1 (2指向1,而1指向log. txt,因此2也指向了log. txt)
显示passwd中的行数,单词数和字节数
Shell脚本变量
变量的作用
用来存放系统和用户需要使用的特定参数(值)
变量名:使用固定的名称,由系统预设或用户定义
变量值:能够根据用户设置、系统环境的变化而变化
变量的类型
自定义变量:由用户自己定义、修改和使用;
特殊变量:环境变量,只读变量,位置变量,预定义变量
自定义变量
定义新的变量:
变量名以字母或者下划线开头,区分大小写,建议全大写,长度不超过20个
变量名=变量值
echo $变量名
自定义变量可修改
赋值时使用引号
双引号:允许通过$符号引用其他变量值
单引号:禁止引用其他变量值,$视为普通字符
反撇号:命令替换,提取命令执行后的输出结果
testing=date
, 也可以是testing$(date) ,代表的意思相同
read命令获取用户输入的内容
方法一:
read -p “提示信息” 变量名
方法二:
#!/bin/bash
echo -n “提示信息:”
read 变量名
变量作用范围
默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子Shell环境时局部变量将无法再使用。
可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用
格式1: export变量名
格式2: export 变量名=变量值
shell环境
可以使用pstree 命令查看Shell环境,输入bash命令进入子Shell环境
按Ctrl+D组合键或输入exit命令退出子Shell环境
整数变量的运算
格式:expr 变量1 运算符 变量2 [运算符 变量3]
运算符:+ 加法、-减法、\*乘法、/除法、%取余
常用的运算表达式:(下列举例中:a=10,b=20)
数字运算:i=$(expr 12\*5)
变量运算:i=$(expr $a \* $b)
其他的话还有几种运算方式:
数字运算: i=$((12 * 5))
变量运算:i=$(($a * $b))
数字运算:i=$[12 * 5]
变量运算:i=$[$a * $b]
数字运算:let i=10 * 10
变量运算:let i=$a*$b
i++相当于
i=
[
[
[i + 1]
i--
相当于`i=
[
[
[i - 1]
i+=1相当于
i=
[
[
[i + 1]
环境变量
环境变量由系统提前创建,用来设置用户的工作环境,使用env命令
可以查看到当前工作环境下的环境变量:
变量USER
表示用户名称
HOME`表示用户的宿主目录
LANG`表示语言和字符集
PWD`表示当前所在的工作目录
变量PATH
表示可执行程序的默认搜索路径
设置系统根据环境变量自动设置可执行程序
echo KaTeX parse error: Expected 'EOF', got '#' at position 28: … #̲查看当前搜索路径 PATH="PATH:/root" #将/root目录添加到搜索路径
export PATH="$PATH:/root" #输出为全局环境变量
设置永久有效:
echo ‘export PATH=$PATH:/root’ >> /etc/profile #将全局环境变量追加到/etc/profile中
将test脚本的所在目录加入搜索路径,然后测试直接执行脚本
只读变量
readonly
命令用于定义只读shell变量和shell函数。readonly
命令的选项-p
可以输出显示系统中所有定义的只读变量。
格式:readonly 【选项】【参数】
位置变量
当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。
$n: n为数字,$0代表命令本身,$1- 9 代 表 带 一 个 到 第 九 个 参 数 , 十 以 上 的 参 数 需 要 使 用 大 括 号 表 示 , 比 如 第 十 个 参 数 为 9代表带一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为 9代表带一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为{10}
{ }号的作用:
使用位置变量进行编写shell脚本的加法运算:
预定义变量
$* 和 $@:都会表示命令或脚本要处理的参数。
$* :把所有参数看成以空格分隔的一个字符串整体(单字符串)返回,代表"$1 $2 $3 $4 "
$@:把各个参数加上双引号分隔成n份的参数列表,每个参数作为一个字符串返回,代表“$1” “$2” “$3” “$4”
预定义变量 | 表示的意思 |
---|---|
$0 | 表示当前执行的脚本或命令的名称 |
$# | 表示命令或者脚本要处理的参数的个数 |
$? | 表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,返回任何非0值均表示执行出现异常,也常被用于shell脚本中return退出函数并返回的退储值 |
$?的使用,可用来判断服务状态是否正常。
编写脚本,压缩文件的时候自动显示填写压缩文件名(包含当天日期),而且自定义压缩后显示的信息
浮点数运算
bash不支持浮点数运算(小数运算),如果需要进行浮点数运算,则需要bc、awk的帮助。
bc的基本用法
bash计算器实际上是一种编程语言,它允许在命令行中输入浮点表达式,然后解释并计算该表达式,最后返回结果。bash计算器能够识别:
数字(整数和浮点数)
变量(简单变量和数组)
注释(以#或C语言中的/* */开始的行)
表达式
编程语句(例如if-then语句)
scale变量的默认值是0,在scale值被设置前,bash计算器的计算结果不包括小数位,在设置为4后,显示的结果包含四位小数。
除了数字外,bash计算器还能支持变量
第二种用法:在脚本中使用