shell脚本中变量的概念

shell脚本概述

将要执行的命令按顺序保存到一个文本文件。

给该文件可执行的权限

可以结合各种shell控制语句以完成更复杂的操作。


shell脚本应用场景

重复性操作

交互性任务

批量事务处理

服务运行状态监控

定时任务执行


面向过程的语言:C,shell

面向对象的语言:java,python,go语言


shell的作用

shell介于系统内核与用户之间,负责解释命令行

用户----->shell------->Linux内核------->系统硬件


什么是shell脚本,以及构成

  • 就是将命令按顺序列出,最后自动执行

  • 执行需要权限,也可以直接使用绝对路径

  • 脚本其实不复杂,通用脚本环境改变后依然可以使用的脚本构成

1.脚本中申明(解释器)︰第一行开头#!/bin/bash 表示此行以下的代码语句是通过/bin/bash程序来解释执行。#! /binfbash为默认的解释器还有其他类型的解释器,#! /bin/python ,#! /bin/expect

2.注释信息: 以#开头的语句表示为注释信息

3.可执行语句:比如echo命令用于输出之间的字符串

shell脚本中变量的概念

shell变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化,通过使用变量,shell程序能够提供更加灵活的功能,适应性更强


变量基础

常见的shell变量类型:

自定义变量:由用户自己定义,修改和使用

变量名=变量值
[root@zzz ~]# a=b
[root@zzz ~]# echo $a
b

环境变量:由系统维护,用于设置工作环境

##使用env命令可以查看当前工作环境下的环境变量
[root@zzz ~]# env
XDG_SESSION_ID=38
HOSTNAME=zzz
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=200
SSH_CLIENT=192.168.232.1 56989 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/1
USER=root

只读变量:只可以读取不可以更改

位置变量:用过命令行给脚本传递参数

预定义变量:Bash中内置的一类变量,不能修改

系统内置变量:PATH UD HOSTNAME USER


命名要求:

  • 区分大小写

  • 不能使用程序中的保留字和内置变量 比如:if for hostname

  • 只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线"-",和主机名相反

  • 不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH

  • 大驼峰StudentFirstName

  • 小驼峰studentFirstName

  • 下划线: student_name

1.赋值时使用双引号(" ")可以直接调用变量

2.赋值时使用单引号(’ ') 只 会 被 认 为 是 字 符 只会被认为是字符 不会调用变量

3.赋值时使用(==``==反撇)命令替换,提取命令执行后的输出结果$()用法相同

4.{}可以分隔变量值


变量追加值

格式:变量名+=追加值

[root@zzz ~]# TITLE=CTO
[root@zzz ~]# TITLE+=:wang
[root@zzz ~]# echo $TITLE
CTO:wang

从键盘输入内容变为变量赋值

read -p

[root@zzz ~]# read -p "请输入你的学号:" num
请输入你的学号:8
[root@zzz ~]#echo $num
8

重定向与管道操作符号 |

标准输入:从该设备接收用户输入的数据

标准输出:通过该设备向用户输出数据

标准错误:通过该设备报告执行出错信息

类型 设备文件 文件描述编号 默认设备
标准输入 /dev/stdin 0 键盘
标准输出 /dev/stdout 1 显示器
标准错误输出 /dev/stderr 2 显示器
类型 操作符 用途
重定向输入 < 从指定的文件读取数据
重定向输出 > 将标准输出结果保存到指定的文件,并且覆盖原有内容
>> 将标准输出结果追加到指定的文件的尾部,不覆盖原有内容
标准错误输出 2> 将错误信息、保存到指定的文件,并且覆盖原有内容
2>> 将错误信息追加到指定的文件的尾部,不覆盖原有内容
混合输出 &> 将标准输出、标准错误保存到同一文件中
2>&1 将标准错误输出重定向到标准输出

在这里插入图片描述


管道操作符号 |

将左侧的命令输出结果,作为右侧命令的处理对象


赋值时使用引号

双引号:允许通过 $符号引用其他变量值

单引号:禁止引用其他变量值, $视为普通字符

反撇号: 命令替换,替换命令执行后的输出结果

在这里插入图片描述


从键盘输入内容为变量赋值

#!/bin/bash

echo -n "我们学的是什么?"
read name1
echo ""



echo "我们学的是$name1"


允许脚本,查看结果

在这里插入图片描述


变量作用范围

默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子shell环境时,局部变量将无法再使用。

可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子shell环境中能够继续使用。

在这里插入图片描述

整数变量的运算

expr 变量1 运算符 变量2 [运算符 变量3]

运算符以及意义

运算符 意义
++ – 增加或减少,可前置 可放到结尾
\ * ZX/ % 乘法,除法,取余
+ - 加 ,减
< <= > >= 比较符号
== ! = 等于与不等于
& 位的与
^ 位的异或
| 位的或
&& 逻辑的与
|| 逻辑的或
?: 条件表达式
= += -= *= /= 赋运算符a+=1 相当于a=a+1

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


只读变量

用于变量值不允许被修改的情况

在这里插入图片描述


位置变量

在这里插入图片描述

在这里插入图片描述

使用位置变量,做一个简单计算器

在这里插入图片描述

在这里插入图片描述

预定义变量

$*:表示所有位置参数的内容看成一个整体返回 返回所有

¥@:表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回

$?: 表示前一条命令执行后的返回状态,返回值为0表示执行正确,返回任何非0值均表示执行出现异常

$#:表示命令行中位置参数的总个数

$0:表示当前执行的脚本或程序的名称

$$:当前进程id

$!:后台任务最后一个id

$#

在这里插入图片描述

在这里插入图片描述


$*
在这里插入图片描述


$@

在这里插入图片描述

在这里插入图片描述

这里需要注意,未加引号时,两者是相同的

现在写个脚本 来体现出两者的不同

在这里插入图片描述

运行脚本

在这里插入图片描述


$?

在这里插入图片描述


浮点运算

bash 是不支持浮点运算,如果需要进行浮点运算,需要借助 bc,awk 处理

[root@zzz ~]# which bc
/usr/bin/bc
[root@zzz ~]# echo "1.1+2.2" | bc		##加
3.3

[root@zzz ~]# echo "2.3-1.2" | bc		##减
1.1

[root@zzz ~]# echo "2.3*1.2" | bc		##乘
2.7

[root@zzz ~]# echo "5.2/1.2" | bc       ##除
4

[root@zzz ~]# echo "5.2/1.2" | bc		##除
4

[root@zzz ~]# echo "scale=2; 5.2/1.2" | bc
4.33					##scale可以绝对保留多少小数位

[root@zzz ~]# echo "scale=3; 5.2/1.2" | bc
4.333

[root@zzz ~]# echo "scale=3;2.3/(2.2-1.1)*2+1.1"|bc
5.280								  ##混合



awk 方法

[root@zzz ~]# awk 'BEGIN{print 1.1-2.2}'
-1.1

[root@zzz ~]# awk 'BEGIN{print 1.1+2.2}'
3.3

[root@zzz ~]# awk 'BEGIN{print 1.1*2.2}'
2.42

[root@zzz ~]# awk 'BEGIN{print 1.1/2.2}'
0.5

[root@zzz ~]# awk 'BEGIN{print 1.1/2.23}'
0.493274

[root@zzz ~]# awk 'BEGIN{print (4.5+2.3)*6.6/7.7}'
5.82857

[root@zzz ~]# 

猜你喜欢

转载自blog.csdn.net/weixin_54059979/article/details/121925996