Hom's Blog


Shell变量,数组,运算及操作

变量

变量赋值

  • 直接赋值: var="abc"
  • 通过命令返回: var=`date`var=$(date)
  • 通过交互读入: read var
  • 取消变量赋值: var=
  • 取消变量: unset var

环境变量(一般推荐用大写)

  • export var="abc"export var
  • 取消环境变量:unset var

变量调用

一般地,采用$var即可.在字符串中或其余语句中,为了避免误解,更常用${var}方法调用,{}是最规范方法.
另外,变量可以在大括号内加入修饰词来对变量进行进一步操作.如下:

${#var}    #返回变量字符串的长度
${变量1/查找字符/替换字符} #将从左起找到的字符替换为替换字符串(字符串不用"")
${变量1/#查找字符/替换字符} #将左边第一个字符起的查找字符替换为替换字符串
${变量1/%查找字符/替换字符} #右边第一个字符起的查找字符替换为替换字符串
${变量1//查找字符/替换字符} #将所有查找到的字符替换为替换字符串
${变量1:位置} #返回从位置起到结尾的字符串,注意位置是从0数起的,(-3)是倒数第三个
${变量1:开始位置:结束位置} #某个范围内.不能为负数.
${字串#匹配字串};${字串%匹配字串} #最左/最右起匹配的最短字符串(支持*等)的删去
${字串##匹配字串};${字串%%匹配字串} #最左/最右起匹配的最长字符串(支持*等)的删去

例子:

${1%.*}   #变量文件名(不包含.txt)
${1%/*}   #变量文件所在目录
${1##*.}  #变量文件的后缀名
${@:3}    #第三个及以后的所有输入参数

注意:csh/zsh才有用法:对于路径的文件名, :t表示file.txt(文件名), :r=/abc/file(除去扩展名部分), :e=txt(扩展名), :h=/abc(目录名) 如${var:e}获得后缀名.

数组

赋值和取消赋值

  • 直接赋值: array=(a b c)
  • 字符串转化: x="a b c d";array=(x)
  • 逐个指明: array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)
  • 使用seq:array=(`seq 1 2 10`)
  • 声明是个数组:declare -a array,一般不使用.
  • 对指定元素赋值: array[n]="a"(元素序号见下说明).
  • 数组末追加元素:varname=(${var[*]} varn-1 varn varn+1)varname[${#var[*]}]=varn.前者更好,避免zsh时索引号不对.
  • 删除某个元素: unset var[n],bash用,csh不行
  • 清空某个元素: var[n]=,注意该元素还在,没有值,数组长不变!不适用于csh
  • 整个数组删除: unset var

调用

  • 调用元素: ${array[n]}.注意,bash,ksh使用0开始;zsh.tcsh使用1开始,还直接支持$array[n]的用法.
  • 调用所有元素:${array[*]}${array[@]}.bash$array只会返回第一个元素.在zsh,tcsh支持$array返回所有元素.
  • 返回数组元素数目:${#array[*]},zsh/tcsh支持${#array}
  • 查看数组现在的情况:set|grep arrayname

运算

  • ((z=x+y))let z=x*y,前者可以加入空格进行分割,后者let只能连着输入不能有空格.只支持整数运算.在csh使用@ z=$a + $b的方法.
  • 支持+-*/%,**运算,/会取整.%取余,**幂运算
  • 支持+=,-=,*=./=,%=自操作运算.
  • 支持z++,z--自加/减一运算.
  • expr 5 + 7 直接运算并返回.只支持+-*/%,其中乘要转义\*.运算符号左右都有空格.expr的优点是可以跨不同shell使用.
  • 类似于expr效果,$((5+7))$[5+7]也能输出运算结果,运算符号左右可以没有空格.


◆ 本文地址: http://platinhom.github.io/2015/06/15/shell-varient-operation/, 转载请注明 ◆

前一篇: Shell中比较判断,控制,循环和函数
后一篇: pKa Calculation


Contact: Hom / 已阅读()
Source 类别: Coding  标签: Bash  Shell  Key