1、变量类型

1.1、全局变量

  1. export ip=10.0.0.1 定义环境变量,在当前shell和子shell有效

1.2、数组变量

  1. #普通数组/关联数组 关联数组索引 可以是字符串
  2. array[0]=1
  3. array[1]=2
  4. ${array[@]} 数组所有的元素,以空格隔开
  5. array[$num] 数组某个角标的元素
  6. len=${#array[@]} 数组的长度 {#var}变量var的长度
  7. ${!array[@]} 获取数组元素的索引

1.3、位置变量

  1. $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}

1.4、预定义变量

  1. $0 脚本名
  2. $* 所有的参数
  3. $@ 所有的参数
  4. $# 参数的个数
  5. $$ 当前进程的pid
  6. $! 上一个后台进程的pid
  7. $? 上一个命令的返回值,0表示成功

2、变量赋值

2.1、显式赋值

  1. ip=127.0.0.1
  2. name"lms"
  3. time=`date +%F` 命令替换
  4. today=$(date +%F) 命令替换

2.2、read 从键盘读入

  1. read ip
  2. read -p "enter ip: " ip
  3. read -t 3 ip 等待3
  4. read -n 2 name 取两个字符
  5. read name sex age 输入三个变量

3、变量的运算

3.1、expr

  1. expr 1 + 2
  2. expr $a + $b
  3. # + - \* / % 注意乘号需要转义
  4. sum =`expr $a + $b`

3.2、$(())

  1. echo $((1+2))
  2. echo $((1-2))
  3. echo $((1*2))
  4. echo $((2**3)) 2的三次方
  5. echo $((1/2))
  6. echo $((a +b )) 变量可以不需要加$
  7. num=$((1/2))
  8. ((sum++)) 不需要sum的值时

3.3、$[]

  1. echo $[3+2]
  2. echo $[3-2]
  3. echo $[3*2]
  4. echo $[3/2]
  5. echo $[3%2]
  6. echo $[3**3] 33次方
  7. num=$[3/2]

3.4、let

  1. let sum=2+3
  2. let sum+=$i
  3. let i++ 不需要i的值时

4、变量的替换、截取、替代

  1. #去除空格换行符
  2. echo $var |tr -d '\n\r'
  1. url=www.sina.com.cn
  2. #截取
  3. echo ${#url} # 15 变量的长度
  4. echo ${url#www.} #sina.com.cn,截取变量www., 从前往后
  5. echo ${url#*.} #sina.com.cn,截取变量到第一个.。从前往后
  6. echo ${url##*.} #cn。截取变量到最后一个.从前往后
  7. echo ${url%.*} #www.sina.com ,从后往前第一个.
  8. echo ${url%%.*} #www,从后往前,最后一个.
  9. echo ${url:0:5} #www.s,从索引0开始,截取五个字符
  10. echo ${url:5:2} #in,从索引5开始,截取2个字符
  11. echo ${url:5} #ina.com.cn,从索引5开始到结束
  12. ##替换
  13. echo ${url/sina/baidu} #www.baidu.com.cn ,替换字符串
  14. echo ${url/n/N} #www.siNa.com.cn ,替换第一个字符n
  15. echo ${url//n/N} #www.siNa.com.cN , 替换所有字符n
  16. #替代
  17. echo ${var1-abc} #var1为空值也不能被替换,只有没被定义时才可以替代
  18. echo ${var1:-abc} #var1为空或为定义都会被替代
  19. #其它
  20. echo ${var3+aaa}
  21. echo ${var3:+aaa}
  22. echo ${var3=aaa}
  23. echo ${var3:=aaa}
  24. echo ${var3?aaa}
  25. echo ${var3:?aaa}

5、注意事项

  1. "" 弱引用 echo "$name" # lms
  2. '' 强引用 不会替换变量 echo '$name' # $name

6、示例

6.1、数组去重

  1. arr=($(echo ${arr[*]} | sed 's/ /\n/g'|sort |uniq))数组去重 sort- u也可以去重