shell编程学习篇-Shell变量

参考shell编程:https://www.runoob.com/linux/linux-shell-variable.html
定义变量
定义变量  变量前不加$美圆符号(php语言中须要添加)
命名规则
与Java命名规则相同
  1.不能如下划线、空格、数字、特殊符号开头
  2.不能使用bash关键字
使用变量:声明变量后,若是使用变量只须要在变量前面加$符号便可
test_name="aa"
  echo $test_name
只读变量:使用 readonly 命令能够将变量定义为只读变量,只读变量的值不能被改变。


运行的结果以下
php

删除变量:unset
unset variable_name
三种变量类型
1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其余shell启动的程序不能访问局部变量。
  2) 环境变量 全部的程序,包括shell启动的程序,都能访问环境变量,有些程序须要环境变量来保证其正常运行。必要的时候shell脚本也能够定义环境变量。
  3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
单引号:不会转义,不列举例子
单引号字符串的限制:
  单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,做为字符串拼接使用。
多引号:能够转义,不列举例子
双引号的优势:
  双引号里能够有变量
  双引号里能够出现转义字符
获取字符串长度
${#string}
提取子字符串
${String:index_start-1:char_account}
  列入从第二个字符开始截取6个字符
  ${string:1:6}
查找子字符串
expr index "$string" +查到的某个字符串
shell数组:bash支持一维数组(不支持多维数组),而且没有限定数组的大小。
数组名=(值1,值2.....)
  例:array_name=(value1,value2......)
读取数组
读取数组元素值的通常格式是:
  ${数组名[下标]}
  例${array_name[0]}
获取数组长度的方法与获取字符串长度的方法相同,例如:
# 取得数组元素的个数
  length=${#array_name[@]}
  # 或者
  length=${#array_name[*]}
  # 取得数组单个元素的长度
  lengthn=${#array_name[n]}
Shell 注释
以 # 开头的行就是注释,会被解释器忽略。
  经过每一行加一个 # 号设置多行注释
多行注释
多行注释还可使用如下格式:
  :<<EOF
  注释内容...
  注释内容...
  注释内容...
  EOF
shell传递参数
脚本内获取参数的格式为:$n。n 表明一个数字,0表明执行的文件名,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
  $#	传递到脚本的参数个数
  $*	以一个单字符串显示全部向脚本传递的参数。
            如"$*"用「"」括起来的状况、以"$1 $2 … $n"的形式输出全部参数。
  $$	脚本运行的当前进程ID号
  $!	后台运行的最后一个进程的ID号
  $@	与$*相同,可是使用时加引号,并在引号中返回每一个参数。
            如"$@"用「"」括起来的状况、以"$1" "$2" … "$n" 的形式输出全部参数。
  $-	显示Shell使用的当前选项,与set命令功能相同。
  $?	显示最后命令的退出状态。0表示没有错误,其余任何值代表有错误。
shell数组
声明array_name=(value1 value2......)或array_name[0]=value1 array_name[1]=value2......
  取值      ${array_name[0]}
  取元素个数 ${#array_name[*]}或 ${#array_name[@]}
shell基本运算符
Shell 和其余编程语言同样,支持多种运算符,包括:
  算数运算符
  关系运算符
  布尔运算符
  字符串运算符
  文件测试运算符
  原生bash不支持简单的数学运算,可是能够经过其余命令来实现,例如 awk 和 expr,expr 最经常使用。
  expr 是一款表达式计算工具,使用它能完成表达式的求值操做。
  1.算术运算符:与java相同    须要expr
  +	加法	`expr $a + $b` 结果为 30。
  -	减法	`expr $a - $b` 结果为 -10。
  *	乘法	`expr $a \* $b` 结果为  200。
  /	除法	`expr $b / $a` 结果为 2。
  %	取余	`expr $b % $a` 结果为 0。
  =	赋值	a=$b 将把变量 b 的值赋给 a。
  ==	相等。用于比较两个数字,相同则返回 true。	[ $a == $b ] 返回 false。
  !=	不相等。用于比较两个数字,不相同则返回 true。	[ $a != $b ] 返回 true。
  2.关系运算符:与java相同
  -eq   ==	检测两个数是否相等,相等返回 true。	[ $a -eq $b ] 返回 false。
  -ne   !=	检测两个数是否不相等,不相等返回 true。	[ $a -ne $b ] 返回 true。
  -gt   >	检测左边的数是否大于右边的,若是是,则返回 true。	[ $a -gt $b ] 返回 false。
  -lt   <	检测左边的数是否小于右边的,若是是,则返回 true。	[ $a -lt $b ] 返回 true。
  -ge   >=	检测左边的数是否大于等于右边的,若是是,则返回 true。	[ $a -ge $b ] 返回 false。
  -le   <=	检测左边的数是否小于等于右边的,若是是,则返回 true。	[ $a -le $b ] 返回 true。
  3.布尔运算符
  !	非运算,表达式为 true 则返回 false,不然返回 true。	[ ! false ] 返回 true。
  -o	或运算,有一个表达式为 true 则返回 true。	[ $a -lt 20 -o $b -gt 100 ] 返回 true。
  -a	与运算,两个表达式都为 true 才返回 true。	[ $a -lt 20 -a $b -gt 100 ] 返回 false。
  4.逻辑运算符
  &&	逻辑的 AND	[[ $a -lt 100 && $b -gt 100 ]] 返回 false
  ||	逻辑的 OR	[[ $a -lt 100 || $b -gt 100 ]] 返回 true
  5.字符串运算符
  =	检测两个字符串是否相等,相等返回 true。	[ $a = $b ] 返回 false。
  !=	检测两个字符串是否相等,不相等返回 true。	[ $a != $b ] 返回 true。
  -z	检测字符串长度是否为0,为0返回 true。	[ -z $a ] 返回 false。
  -n	检测字符串长度是否不为 0,不为 0 返回 true。	[ -n "$a" ] 返回 true。
  $	        检测字符串是否为空,不为空返回 true。	[ $a ] 返回 true。
  6.文件测试运算符
  文件测试运算符用于检测 Unix 文件的各类属性。
  -b file	检测文件是不是块设备文件,若是是,则返回 true。	[ -b $file ] 返回 false。
  -c file	检测文件是不是字符设备文件,若是是,则返回 true。	[ -c $file ] 返回 false。
  -d file	检测文件是不是目录,若是是,则返回 true。	[ -d $file ] 返回 false。
  -f file	检测文件是不是普通文件(既不是目录,也不是设备文件),若是是,则返回 true。	[ -f $file ] 返回 true。
  -g file	检测文件是否设置了 SGID 位,若是是,则返回 true。	[ -g $file ] 返回 false。
  -k file	检测文件是否设置了粘着位(Sticky Bit),若是是,则返回 true。	[ -k $file ] 返回 false。
  -p file	检测文件是不是有名管道,若是是,则返回 true。	[ -p $file ] 返回 false。
  -u file	检测文件是否设置了 SUID 位,若是是,则返回 true。	[ -u $file ] 返回 false。
  -r file	检测文件是否可读,若是是,则返回 true。	[ -r $file ] 返回 true。
  -w file	检测文件是否可写,若是是,则返回 true。	[ -w $file ] 返回 true。
  -x file	检测文件是否可执行,若是是,则返回 true。	[ -x $file ] 返回 true。
  -s file	检测文件是否为空(文件大小是否大于0),不为空返回 true。	[ -s $file ] 返回 true。
  -e file	检测文件(包括目录)是否存在,若是是,则返回 true。	[ -e $file ] 返回 true。
相关文章
相关标签/搜索