Shell--基础知识

变量的定义:

  • a=1
  • b=hello
  • c="hello world !"
  • d='hello "反启" !'
  • e=`ls`  (注意:这是反引号)

  备注:=号左右不能有空格;如果内容有空格需要使用单引号或者双引号;双引号支持转译 $开头的变量会被自动替换

变量的使用:

  echo $a

  echo ${a}

  echo "$a"

  备注:使用$var 或 ${var}来访问变量,后者更为严谨,$var_x和${var}_x是不同的;变量不需要定义也可以使用,引用未定义的变量,默认为空值。

预定义变量:

  • echo $USER
  • echo $PWD
  • echo $PATH
  • echo $HOME

数组变量:

  array=(1 2 3 4 5)

  array=(`ls`)

  打印数组第一个元素:echo ${array[0]}

  打印数组:echo ${array[@]} 或 echo ${array[*]}

  打印数组长度:echo ${#array[@]}

  备注:使用()来定义数组

特殊符号的使用:

  • 双引号用于括起一段字符串值,支持$var形式得变量替换
  • 单引号也表示其内容是字符串值,不支持转义
  • \反斜杠,某些情况下表示转义
  • $(ls) 表示执行ls命令后的结果,与``类似,它还可以嵌套
  • $(()) 对变量进行操作。比如变量a、b相加:$((a+b))或$(($a+$b))
  • (()) 是整数扩展,把里面的变量当作整数去处理
  • ({1..10}) 等价于seq 1 10 ,表示1到10

变量类型:

  • 字符串:a="xx"
  • 布尔:a=true
  • 数字:a=131452

字符串操作:

  提取子字符串:${value:offset} ${value:offset:ength}

  字符串长度:${#var}

  掐去头或尾:

    去头:${value#pattern} ${value##pattern}

    去尾:${value%pattern} ${value%%pattern}

    例如:value="hello from home" -> echo ${value#*o} 或 ${value#hello} 打印"from home"

  替换:${value/pattern/string} ${value//pattern//string}

  备注:#与## %与%% /与//的区别:最短匹配模式VS最长匹配模式

算术判断:

  相等:[ 2 -eq 2 ]

  不相等:[ 2 -ne 2 ]

  大于:[ 3 -gt 1 ]

  大于等于:[ 3 -ge 3 ]

  小于:[ 3 -lt 4 ]

  小于等于:[ 3 -le 3 ]

  逻辑与-a:[ 2 -ge 1 -a 3 -ge 4 ]

  逻辑或-o:[ 2 -ge 1 -o 3 -ge 4 ]

  注意:中括号与相邻数字的空格

字符串判断:

  [ string1 = string2 ] :如果两字符串相同,则结果为真

  [ string1 != string2 ] :如果两字符串相同,则结果为真

  [ -n string ] :如果字符串不是空,则结果为真

  [ -z string ] :如果字符串是空,则结果为真

  [[ "xxxx" == x* ]] :*在表达式中表示0或者多个字符

  [[ xxx == x? ]] :?在表达式中表示单个字符

内置判断:

  [ -e file ] :如果文件存在,则结果为真

  [ -d file ] :如果文件是一个子目录,则结果为真

  [ -f file ] :如果文件是一个普通文件,则结果为真

  [ -r file ] :如果文件可读,则结果为真

  [ -s file ] :如果文件的长度不为0,则结果为真

  [ -w file ] :如果文件可写,则结果为真

  [ -x file ] :如果文件可执行,则结果为真

逻辑判断:

  if条件判断:

    if [ condition ] ; then ...; fi

    if [ condition ] ; then ...;else ...;fi

    if [ condition ] ; then ...;elif ...;fi

    备注:&& 与 ||;&&之前为执行成功时,才会执行后面的;||之前为执行失败时,才会执行后面的

  for条件判断:

    for(( c1; c2; c3));

    do ...;

    done

  如:for ((i=0;i<4;i++));do echo $i;done

    for x in (1 2 3 4 5);do echo $x;done

  while循环:

    i=0;

    while [ $i -lt 3 ];

    do ...;

    ((i=i+1));

    done

  退出控制:

    return ;

    break ;

    continue ;

猜你喜欢

转载自www.cnblogs.com/fqfanqi/p/10054194.html