shell变量简介shell
变量是任何一种编程语言都必不可少的组成部分,变量用来存放各类数据。脚本语言在定义变量时一般不须要指明类型,直接赋值就能够,shell变量也循环这个规则。express
在bash shell中,每个变量的值都是字符串,不管你给变量赋值是有没有使用引导,值都会以字符串的形式储存。编程
这意味着,bash shell在默认状况系不会区分变量类型,即便你将整数和小数赋值给变量,他们也会被视为字符串,这一点和大部分的编程语言不通。数组
定义变量bash
shell支持如下三种定义变量的方式less
variable=value variable='value' variable="value"
variable是变量名,value是赋给变量的值。编程语言
注意:赋值号的周围不能有空格,这与其它大部分编程语言不同函数
Shell 变量的命名规范和大部分编程语言都同样:工具
使用变量测试
使用一个定义过得变量,只要在变量名前加美圆符号$便可
author="ken" echo $author echo ${author}
变量名外面的花括号{}是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界
例如
skill="Java" echo "I am good at ${skill}Script"
若是不是skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把 $skillScript 当成一个变量(其值为空),代码执行结果就不是咱们指望的样子了。推荐给全部变量加上花括号{ },这是个良好的编程习惯。
系统变量
在命令行提示符直接执行 env、set 查看系统或环境变量。env 显示用户环境变量,set 显示 Shell 预先定义好的变量以及用户变量。能够经过 export 导出成用户变量。一些写 Shell 脚本时经常使用的系统变量
$SHELL | 默认shell |
$HOME | 当前用户家目录 |
$IFS | 内部字段分隔符 |
$LANG | 默认语言 |
$PATH | 默承认执行程序路径 |
$PWD | 当前目录 |
$UID | 当前用户ID |
$USER | 当前用户 |
$HISTSIZE | 历史命令大小,可经过HISTTIMEFORMAT变量设置明命令执行时间 |
$RANDOM | 随机生成一个0到32767的整数 |
$HOSTNAME | 主机名 |
普通变量定义:VAR=value
临时环境变量定义:export VAR=value
变量引用:$VAR
区别:shell进程的环境变量做用域是shell进程,当export导入系统变量时,则做用域是shell进程机器shell子进程,另开shell无效
修改变量的值
已定义的变量,能够从新赋值
url="http://www.baidu.com" echo ${url} url="http://www.sina.com" echo ${url}
第二次对变量赋值时不能再变量前加$,只有在使用变量时才能加$
单引号、双引号、反引号
单引号:所见即所得
双引号:解析变量和命令
反引号:执行命令。与$()做用相同
删除变量
使用unset命令能够删除变量
unset variable_name
变量删除后不能再次使用,unset命令不能删除只读变量
[root@ken ~]# name=ken [root@ken ~]# readonly name [root@ken ~]# echo $name ken [root@ken ~]# unset name -bash: unset: name: cannot unset: readonly variable
变量类型
①局部变量:局部变量在脚本或者命令中定义,尽在当前shell实例中有效,其它shell启动的程序不能访问局部变量
②环境变量:全部的程序,包括shell启动的程序,都能访问环境变量,有些程序须要环境变量来保证其正常运行。必要的时候shell脚本也能够定义环境变量
③shell变量:shell变量是由shell程序设置的特殊变量shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
特殊变量列表(shell变量)
变量 | 含义 |
$0 | 当前脚本的文件名 |
$n | 传递给脚本或者函数的参数,n是一个数字,表示第几个参数 |
$# | 传递给脚本或者函数的参数个数 |
$* | 传递给脚本或函数的全部参数 |
$? | 上个命令的退出状态,或者函数的返回值 |
$$ | 当前shell进程ID。对于shell脚本,就是这些脚本所在的进程ID |
退出状态
$?能够获取上一个命令的退出状态,所谓的退出状态,就是上一个命令执行后的返回结果
退出状态是一个数字,通常状况系,大部分命令执行成功会返回0,失败会返回1
不过,也会有一些命令返回其余值,表示不一样类型的错误
条件表达式
表达式 | 实例 |
[ expression ] | [ 1 -eq 1 ] |
[[ expression ]] | [[ 1 -eq 1 ]] |
test expression | test 1 -eq 1 ,等同于[] |
注意:括号中的表达式先后都要有空格,不然会报错
整数比较符
比较符 | 描述 | 实例 |
-eq equal | 等于 | [ 1 -eq 1 ] 为true |
-ne not equal | 不等于 | [ 1 -ne 1 ] 为false |
-gt greate than | 大于 | [ 1 -gt 1 ] 为false |
-lt lesser than | 小于 | [ 1 -lt 1 ] 为false |
-ge greate or equal | 大于或者等于 | [ 1 -ge 1 ] 为true |
-le lesser or equal | 小于或者等于 | [ 1 -le 1 ] 为true |
字符串比较符
运算符 | 描述 | 实例 |
== | 等于 | [ "a" == "a" ] 为true |
!= | 不等于 | [ "a" != "a" ] 为false |
-n | 字符串长度不等于0为真 | VAR1=1;VAR2="" [ -n "$VAR1" ]为 true [ -n "$VAR2" ]为 false |
-z | 字符串长度等于0为真 | VAR1=1;VAR2="" [ -z "$VAR1" ]为false [ -z "$VAR2" ]为 true |
文件测试
测试符 |
描述 | 实例 |
-e |
文件或者目录存在为真 | [ -e path ] path 存在为 true |
-f |
文件存在为真 | [ -f file_path ] 文件存在为 true |
-d |
目录存在为真 | [ -d dir_path ] 目录存在为 true |
-r |
有读权限为真 | [ -r file_path ]file_path有读权限为真 |
-w |
有写权限为真 | [ -r file_path ]file_path有写权限为真 |
-x |
有执行权限为真 | [ -r file_path ]file_path有执行权限为真 |
布尔运算符
运算符 |
描述 | 实例 |
! |
非关系,条件结果取反 |
[ ! 1 -eq 2 ]为true |
-a |
和关系,在[]表达式中使用 |
[ 1 -eq 1 -a 2 -eq 2 ]为true 二者都为真才为真 |
-o |
或关系,在[]表达式中使用 | [ 1 -eq 1 -o 2 -eq 1 ]为true 二者有一真则为真 |
逻辑判断符
判断符 | 描述 | 实例 |
&& |
逻辑和,在[[]]表达式中 或判断表达式是否为真时使用 |
[[ 1 -eq 1 && 2 -eq 2 ]]为 true [ 1 -eq 1 ] && echo 'true',若是&&前面的 表达式为true则执行后面的 |
|| |
逻辑或,在[[]]表达式中 或判断表达式是否为真时使用 |
[[ 1 -eq 1 || 2 -eq 1 ]]为 true [ 1 -eq 2 ] || echo 'true',若是||前面的 表达式为false则执行后面的 |
注意:[] 不支持以上两个逻辑判断符,应该使用布尔运算符
整数运算
运算符 |
描述 |
+ |
加法 |
- |
减法 |
* |
乘法 |
/ |
除法 |
% |
取余 |
运算表达式 |
实例 |
$(()) |
$((1+1)) |
$[] |
$[] |
其余运算工具
命令 | 描述 |
实例 |
let | 赋值并运算,支持++、-- |
let VAR=(1+2)*3 ; echo $VAR x=10 ; y=5 let x++;echo $x 每执行一次 x 加 1 let y--;echo $y 每执行一次 y 减 1 let x+=2 每执行一次 x 加 2 let x-=2 每执行一次 x 减 2 |
expr | 乘法*须要加反斜杠转义\* |
expr 1 \* 2 运算符两边必须有空格 expr \( 1 + 2 \) \* 2 使用双括号时要转义 |
bc | 计算器,支持浮点运算、平方等 |
bc 自己就是一个计算器,可直接输入命令,进入解释器 echo 1 + 2 |bc 将管道符前面标准输出做为 bc 的标准输入 echo "1.2+2" |bc |
shell括号用法总结
() | 用途1:在运算中,先计算小括号里面的内容 用途2:数组 用途3:匹配分组 |
(()) | 用途1:表达式,不支持-eq这类的运算符。不支持-a和-o,支持<=、>=、>这类比较符和&&、|| |
$() | 执行shell命令。与反引号等效 |
$(()) | 用途1:简单算术运算 用途2:支持三目运算符 例:$(( 表达式?数字:数字 )) |
[] | 条件表达式,里面不支持逻辑判断符 |
[[]] | 条件表达式,里边不支持-a和-o,不支持<=、>=比较符,但支持-eq、<、>这类比较符 |
$[] | 简单算术运算 |
{} | 对逗号(,)和点点(...)起做用,好比touch {1..3}或者{1,2,3} |
${} | 用途1:引用变量 用途2:字符串处理 |