Linux基础知识 ·

Linux变量基础

[隐藏]

变量

Linux中变量能够提高我们的工作效率,简单的定义变量:就是以一组文字或符号等,来代替一些设置或者是一串保留的数据,让我们在需要的时候方便的调用。

变量的显示与设置

显示变量内容:echo $变量名或echo ${变量名}

变量的设置规则:

  • 变量赋值用等号“=”;
  • 等号两边不能直接接空格等特殊字符;
  • 变量名称只能是字母与数字,但是开头不能是数字;
  • 变量内容若有空格可用单引号“ ‘ ’”或双引号“ “ ”将变量内容结合起来;

单引号强引用,内容强行引用为字符。

双引号若引用,可引用内用内的变量。

  • 特殊符号需要用反斜杠“\”转义;
  • 若需要引用命令则使用返单引号“ ` ”【可多层嵌套】或“$(命令)”【不可多层嵌套】;
  • 变量内容累加:变量名=“$变量名”累加内容(PATH="PATH":/root/bin);

取消变量:unset 变量名(不加“$”符号)

变量类型:

本地变量:只对当前shell进程生效

环境变量:可对当前shell进程和子进程生效

局部变量:只对当前shell进程特定代码段生效

特殊变量: $?, $0, $*, $@, $#

$#:获取当前shell命令行中参数的总个数
$*:获取当前shell的所有参数 “$1 $2 $3 …,受IFS控制
$@:这个程序的所有参数 “$1″ “$2″ “$3″ “…”,不受IFS控制
$0 获取当前执行的shell脚本的文件名
$n 获取当前执行的shell脚本的第n个参数值,n=1..9
$$ 获取当前shell的进程号(PID)
$! 执行上一个指令的PID

查看已设变量:

env:显示当前用户变量

export:显示当前导出成用户变量的shell变量(还可设置环境变量)

set:显示所有变量(含环境变量与自定义变量)

声明变量类型:

declera/typeset

两者功能一样,都是声明变量类型,如果其后不接参数,将与set一样列出所有的变量。

常用选项:

-a:定义数组变量

-i:定义整数变量

-x:定义环境变量

-r:定义变量为readonly类型,该变量不可改变内容,也不能重设。

若不指定,变量类型默认为字符串类型。

bash不支持浮点型数值

bash中的算术运算: let

+, -, *, /, %取模(取余) , **(乘方)

实现算术运算:

(1) let var=算术表达式

(2) var=$[算术表达式]

(3) var=$((算术表达式))

(4) var=$(expr arg1 arg2 arg3 ...)

(5) declare –i var = 数值

(6) echo ‘算术表达式’ | bc

 乘法符号有些场景中需要转义, 如*

 bash有内建的随机数生成器: $RANDOM( 1-32767)

echo $[$RANDOM%50] : 0-49之间随机数

增强型赋值:

+=, -=, *=, /=, %=

 let varOPERvalue

例如:let count+=3

自加3后自赋值

 自增,自减:

let var+=1

let var++

let var-=1

let var--

test判断测试

数值测试:
-gt: 是否大于
-ge: 是否大于等于
-eq: 是否等于
-ne: 是否不等于
-lt: 是否小于
-le: 是否小于等于

字符串测试:
==:是否等于;
>: ascii码是否大于ascii
<: 是否小于
!=: 是否不等于
=~: 左侧字符串是否能够被右侧的PATTERN所匹配
注意
此表达式一般用于[[ ]]中;扩展的正则表达式
-z "STRING":字符串是否为空,空为真,不空为假
-n "STRING":字符串是否不空,不空为真,空为假
注意:用于字符串比较时的用到的操作数都应该使用引号
 。

 

存在性测试

-a FILE:同-e

-e FILE: 文件存在性测试,存在为真,否则为假

存在性及类别测试

-b FILE:是否存在且为块设备文件

-c FILE:是否存在且为字符设备文件

-d FILE:是否存在且为目录文件

-f FILE:是否存在且为普通文件

-h FILE 或 -L FILE:存在且为符号链接文件

-p FILE:是否存在且为命名管道文件

-S FILE:是否存在且为套接字文件

文件权限测试:

-r FILE:是否存在且可读

-w FILE: 是否存在且可写

-x FILE: 是否存在且可执行

文件特殊权限测试:

-u FILE:是否存在且拥有suid权限

-g FILE:是否存在且拥有sgid权限

-k FILE:是否存在且拥有sticky权限

文件大小测试:

-s FILE: 是否存在且非空

文件是否打开:

-t fd: fd表示文件描述符是否已经打开且与某终端相关

-N FILE:文件自动上一次被读取之后是否被修改过

-O FILE:当前有效用户是否为文件属主

-G FILE:当前有效用户是否为文件属组

双目测试:

FILE1 -ef FILE2: FILE1与FILE2是否指向同一个设

备上的相同inode

FILE1 -nt FILE2: FILE1是否新于FILE2

FILE1 -ot FILE2: FILE1是否旧于FILE2

 

参与评论