Shell脚本的变量

发布时间:2024年01月23日

目录

一、变量基础

1.1.变量概念

1.2.变量的作用

1.3.变量的类型

1.4.自定义变量命名要求

1.5.定义与查看变量

1.5.1定义变量

1.5.2查看变量值

1.5.3.删除变量unset

1.6.变量作用规范

1.7.整数的运算

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

1.9.环境变量

1.10.只读变量

1.11.位置变量

1.12.预定义变量

1.13.() {}

1.14.【【】】用法

二、条件测试

2.1.test

2.2.比较整数数值

2.3.字符串比较

2.4.逻辑测试(短路运算)


一、变量基础

1.1.变量概念

变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。

保存将来会变化的数据,即使数据变化,直接调用变量即可,各种 Shell 环境中都使用到了“变量”的概念。Shell 变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化。通过使用变量,Shell 程序能够提供更加灵活的功能,适应性更强。

1.2.变量的作用

用来存放系统和用户需要使用的特定参数(值)

  • 变量名:使用固定的名称,由系统预设或用户定义

  • 变量值:能够根据用户设置、系统环境的变化而变化

1.3.变量的类型

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

特殊变量:环境变量,只读变量,位置变量,预定义变量

预定义变量:Bash中内置的一类变量

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

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

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

1.4.自定义变量命名要求

  • 区分大小写

  • 不能使程序中的保留字和内置变量:如:if, for,hostname 命令 a=

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

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

  • 大驼峰 StudentFirstName

  • 小驼峰 studentFirstName

  • 下划线 student_name

1.5.定义与查看变量

1.5.1定义变量

变量名以字母或下划线开头,区分大小写,建议全大写

格式:变量名=变量值

1.5.2查看变量值

echo $变量名

1.5.3.删除变量unset

unset?变量名

1.6.变量作用规范

export 变量名 = 变量

可以使用pstree查看shell的环境

输入bash进入子shell

ctrl+D组合 exit退出子shell

?

1.7.整数的运算

expr只能进行整数的运算

格式: expr 变量1 运算符 变量2 [运算符 变量3]

运算符:

加法 +

减法 -

乘法 \ *

除法 /

取余 (取模)%

写法不同,运算过程,结果一样

1.8.随机数生成器变量

$RANDOW 范围0-32767

格式:echo?$[RANDOM%3]

?

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

格式:read 变量名

read -p "提示内容" 变量名

1.9.环境变量

  1. 由系统提前创建,用来设置用户的工作环境

  2. 可以使用env查看环境变量

  3. 需要记住的常用环境变量

env ——#可以看到所有

$USER 表示用户名称

$HOME 表示用户的宿主目录

$LANG 表示语言和字符集

$PWD 表示当前所在工作目录

$PATH 表示可执行用户程序的默认路径

环境变量:

  • 可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量

  • 一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程

  • 一般只在系统配置文件中使用,在脚本中较少使用

?

配置文件位置在/etc/profile,如果修改此文件会作用于所有用户

~/.bash_profile 用户独立的配置文件,修改这个文件只作用于当前用户

可以用来长期变更或设置环境变量

1.10.只读变量

变量值不允许修改(重新赋值)的情况

无法使用 unset删除

最快方法重启

1.11.位置变量

位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示

$10会被系统任务是$1+$0组成,要写出${10}

1.12.预定义变量

bash 帮你定义好了 拿来用就可以了,你不需要知道为什么,记住

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

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

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

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

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

  • $$:当前bash的进程id

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

  • $$:当前bash的ip

1.13.() {}

()会开启子shell

{ } 不会开启子shell

例:

?

1.14.【【】】用法

[[ expression ]] 用法
== 左侧字符串是否和右侧的PATTERN相同
?注意:此表达式用于[[ ]]中,PATTERN为通配符
=~ 左侧字符串是否能够被右侧的正则表达式的PATTERN所匹配
?注意: 此表达式用于[[ ?]]中;扩展的正则表达式?

二、条件测试

2.1.test

test 测试文件的表达式 是否成立

格式1:test ?条件表达式
格式2:[ ?条件表达式 ?]
注意[]空格,否则会失败
测试 是否成功使用 $? ?返回值
[ 操作符 文件或目录 ]

操作符效果
-d测试是否为目录(Directory)
-e测试目录或文件是否存在(Exist)
-a 有bag不推荐使用测试目录或文件是否存在(Exist)
-f测试是否为文件(File)
-r测试当前用户是否有权限读取(Read)
-w测试当前用户是否有权限写入(Write)
-x测试当前用户是否有权限执行(eXcute)
-L测试是否为软连接文件

?

2.2.比较整数数值

[ 整数1 -操作符 整数2 ] 公式

  • -eq:第一个数等于(Equal)第二个数

  • -ne:第一个数不等于(Not Equal)第二个数

  • -gt:第一个数大于(Greater Than)第二个数

  • -lt:第一个数小于(Lesser Than)第二个数

  • -le:第一个数小于或等于(Lesser or Equal)第二个数

  • -ge:第一个数大于或等于(Greater or Equal)第二个数

?

2.3.字符串比较

  • =:字符串内容相同

  • !=:字符串内容不同,! 号表示相反的意思

  • -z:字符串内容为空

  • -n: 字符是否存在

格式

[ 字符串1 = 字符串2 ] 是否相同

[ 字符串1 != 字符串2 ] 是否不相同

[ -z 字符串 ] 是否为空

[ -n 字符串 ] 字符是否存在

2.4.逻辑测试(短路运算)

格式1:[ 表达式1 ] 操作符 [ 表达式2 ] ...

格式2:命令1 操作符 命令2 ...

例:cmd1 && cmd2

第一个要真 第二 个也要真 才能是真

如果第一个为假 ,整个 就为假 不用执行下个操作

cmd1 || cmd2

一 真即为真

如果第一个 为真 那么 不用执行第二个

第一个为假 ,才需要执行第二个

cmd1?&& cmd2 || cmd3? ? ? ? ?cmd2为输出信息,一定为真

?将cmd1?&& cmd2看成一个整体

如果cmd1为真,才会去执行cmd2,整体式子为真,不需要执行cmd3

如果cmd1为假,不会去执行cmd2,整体式子为假,需要执行cmd3,来判断真假

文章来源:https://blog.csdn.net/wys_jj/article/details/135770675
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。