shell基础教程-1-基础语法

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell脚本(shell script),是一种为 shell 编写的脚本程序。 Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux 的 Shell 种类众多,常见的有:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
……

本教程关注的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash也是大多数Linux 系统默认的 Shell。
在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像
#!/bin/sh,它同样也可以改为 #!/bin/bash。

一,变量

  1. 定义变量:a=1

  2. 引用变量a并输出具体的值1:echo $a

  3. a不仅可以定义成数字,字符串之类的都可以定义。

  4. shell语言是严格区分大小写的

  5. 左右不要有空格,如果内容有空格,需要使用单引号或者双引号
    b=“hello world”

  6. 单引号和双引号的区别:使用单引号引用的是里面完全的内容,双引号还可以引用变量
    shell基础教程-1-基础语法_第1张图片

  7. 在bash中,我们可以使用一个未定义的变量,但是系统不会报错,默认为空值
    引用未定义变量

  8. 引用变量比较严谨的写法是加上大括号:
    shell基础教程-1-基础语法_第2张图片
    二. 预定义变量
    linux已经帮我们定义好的变量
    echo $PWD
    echo $USER
    echo $HOME
    echo $PATH 环境变量
    shell基础教程-1-基础语法_第3张图片

三,数组变量

  1. 定义数组:a=(1 2 3 4) 中间记得要用空格隔开
  2. 输出数组的第二个值:echo ${a[1]} :下标从0开始
    如果数组是负数,也是支持的
    shell基础教程-1-基础语法_第4张图片
  3. 输出数组的第一个值:echo $a
  4. 输出数组的全部值:echo ${a[@]} 或者 echo ${a[*]}
  5. 输出数组的长度:echo ${#a[@]} 或者 echo ${#a[*]}

shell基础教程-1-基础语法_第5张图片
四,特殊符号的使用

  1. 双引号用于括起一段字符串值,支持$var形式的变量替换
  2. 单引号也表示其内容是字符串值,不支持转义
  3. \ 反斜线,某些情况下表示转义
  4. ${ls} 表示执行ls后的结果,与``类似,不过可以嵌套
  5. ` 反引号,用法比较奇特,代表命令的输出,非常有用
    shell基础教程-1-基础语法_第6张图片
    下面这2者效果一致,区别是用反引号的适用范围更大,适用于大多数linux系统
    shell基础教程-1-基础语法_第7张图片
  6. $(()) 对变量进行操作,比如相加$((a+b)) $((2+3))
    shell基础教程-1-基础语法_第8张图片
    shell基础教程-1-基础语法_第9张图片
  7. (()) 是整数扩展,把里面的变量当做是整数去处理
  8. ({1…10}) 等价于seq1 10,表示1到10
  9. -e:转义字符,比如在大多数编程语言里,\n表示
    换行,如果我不加-e,就只是普通字符,加了之后,就换行了
    shell基础教程-1-基础语法_第10张图片

五,变量类型

  1. 字符串 a=‘aaa’
  2. 数字:i=1234
  3. 布尔:a=true b=false
    shell基础教程-1-基础语法_第11张图片
  4. 自增/自减
    shell基础教程-1-基础语法_第12张图片
    六,布尔变量
    $? :判断上一条语句执行成功还是失败,返回true或者是false,0表示是,1表示否
    shell基础教程-1-基础语法_第13张图片
    特别注意:shell脚本不支持浮点数的运算
    浮点数计算
    如果需要进行浮点数计算,可以使用awk 'BEGIN {print 2/3}'
    浮点数计算2

七,字符串操作

  1. 数值
  • ${value:offset} ${value:offset:length} 从变量中提取子串
  • ${#value} 字符串长度(从1开始,中间括号也算)
  • ${#array[*]} ${#array[@]} 表示数值中元素的个数
    shell基础教程-1-基础语法_第14张图片
  1. 掐头去尾内容替换
  • ${value#pattern} #表示掐头:普通匹配
  • ${value##pattern} #表示掐头:贪婪匹配,匹配到最后一个
    shell基础教程-1-基础语法_第15张图片
    shell基础教程-1-基础语法_第16张图片
  • ${value%pattern} ${value%%pattern} #表示去尾,两个%%表示贪婪匹配
    shell基础教程-1-基础语法_第17张图片
    去尾-贪婪匹配
  • #{value/pattern/string} ${value/pattern/string} /表示替换:value表示变量名称,pattern表示要被替换的变量,string表示替换后的值
    shell基础教程-1-基础语法_第18张图片
  • #与##与%% /与//的区别:最短匹配模式VS最长匹配模式
  • ${var/#Pattern/Replacement} ${var/%Pattern/Replacement}

八,判断的类型

1. 算数判断

  • [ 2 -eq 2 ] 相等 equal

  • [ 2 -ne 2 ] 不等 not equal

  • [ 3 -gt 1 ] 大于 greater than

  • [ 3 -ge 3 ] 大于等于 greater equal

  • [ 3 -lt 4 ] 小于 less than

  • [ 3 -le 3 ] 小于等于 less equal

  • (())也可以表示算数比较。((10>=8)) ,((10==10))
    shell基础教程-1-基础语法_第19张图片
    2. 字符串判断
    3. 逻辑判断

  • -a:等同&&,代表and,表示需要满足2个条件才能返回true

  • -o:等同||,代表or,表示只要满足其中一个条件就能返回true

  • !:表示取反
    shell基础教程-1-基础语法_第20张图片
    shell基础教程-1-基础语法_第21张图片
    4. shell内置判断

  • -e file 如果文件存在,则结果为真

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

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

  • -r file 如果文件可读,则结果为真

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

  • -w file 如果文件可写,则结果为真

  • -x file 如果文件可执行,则结果为真

shell基础教程-1-基础语法_第22张图片

你可能感兴趣的:(shell脚本)