Linux中shell编程基础语法

shell编程

首先介绍一下shell和shell脚本,这里引用百度百科上面的解释:
shell和shell脚本有什么区别?确切一点说,Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。 Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言(就是你所说的shell脚本)。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。

1 shell脚本的编写执行

  • test.sh(第一个shell脚本,在控制台打印输出:Hello World!)
#!/bin/bash
echo "Hello World !"
  • 解释:
    #!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
    Linux中shell编程基础语法_第1张图片
    echo 命令用于向窗口输出文本。
  • 执行shell脚本
    方式1:先设置该脚本可执行的权限,然后执行一般程序的方式运行
    方式1
    方式2:bash shellname.sh(不需要设置可执行权限)
    方式2

2 变量

  • 变量的定义与赋值
    定义变量时,不需要指定变量的数据类型,可直接赋值,但变量名要符合命名规范:字母、数字、下划线组成,且不能以数字开头,不能是关键字。
  • 引用变量
    定义过的变量使用时,可以直接在前面加上$进行引用,引用变量时可以加{}号,也可以不加,主要是用于解释器识别边界。防止与其它字符连接在一起。推荐的是在引用变量时都添加{}。
    注:多变量的使用
    Linux中shell编程基础语法_第2张图片
  • 设置只读变量
    readonly可以将定义过的变量设置为只读,不可以再改变变量的值。
    Linux中shell编程基础语法_第3张图片
  • 删除变量
    unset删除非只读变量,删除后的变量不可以再引用
    Linux中shell编程基础语法_第4张图片
  • 变量类型
    Linux中shell编程基础语法_第5张图片

3 字符串

  • 字符串变量
    字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。
    Linux中shell编程基础语法_第6张图片
    Linux中shell编程基础语法_第7张图片
  • 拼接字符串
    Linux中shell编程基础语法_第8张图片
  • 取字符串长度
    取字符串长度
  • 提取子串
    Linux中shell编程基础语法_第9张图片
  • 查找子串
    Linux中shell编程基础语法_第10张图片
  • 截取字符串
    Linux中shell编程基础语法_第11张图片
    Linux中shell编程基础语法_第12张图片
    Linux中shell编程基础语法_第13张图片

4 数组

  • 数组
    数组
  • 定义数组
    注:第三种方式里面的n必须是数字,要不然会取代数组里面的第一个元素,而且n只要大于已存数组长度,n的取值是任意的,都会默认为原数组新增的一个元素
    Linux中shell编程基础语法_第14张图片
    Linux中shell编程基础语法_第15张图片
    Linux中shell编程基础语法_第16张图片
    注:同一数组里面的元素并不要求同一数据类型
    Linux中shell编程基础语法_第17张图片
  • 读取数组
    注:读取全部元素时也可以用$array[*],与$array[@]是一样的
    Linux中shell编程基础语法_第18张图片
    Linux中shell编程基础语法_第19张图片
    Linux中shell编程基础语法_第20张图片
  • 获取数组长度
    Linux中shell编程基础语法_第21张图片
  • $*与$@的区别
    区别
    Linux中shell编程基础语法_第22张图片

5 注释

Linux中shell编程基础语法_第23张图片
方式2
Linux中shell编程基础语法_第24张图片
Linux中shell编程基础语法_第25张图片

6 输入

Linux中shell编程基础语法_第26张图片
注意事项
Linux中shell编程基础语法_第27张图片

7 获取命令行参数

  • test.sh
    Linux中shell编程基础语法_第28张图片
    Linux中shell编程基础语法_第29张图片
  • $的其它用法

Linux中shell编程基础语法_第30张图片
Linux中shell编程基础语法_第31张图片

  • []的一些用法
    Linux中shell编程基础语法_第32张图片
    1 算术比较
    算术比较1
    Linux中shell编程基础语法_第33张图片
    2 属性测试
    Linux中shell编程基础语法_第34张图片
    Linux中shell编程基础语法_第35张图片
    3 字符串比较
    Linux中shell编程基础语法_第36张图片
    Linux中shell编程基础语法_第37张图片
    4 test
    Linux中shell编程基础语法_第38张图片

8 shell中的基本运算符

  • 基本介绍
    介绍1
    介绍2
    Linux中shell编程基础语法_第39张图片
    Linux中shell编程基础语法_第40张图片
  • 算术运算符
    Linux中shell编程基础语法_第41张图片
    注:乘法运算中*号前面要加(转义字符),主要是用作区分
    Linux中shell编程基础语法_第42张图片
    加法的其它写法2
  • 关系运算符
    Linux中shell编程基础语法_第43张图片
    Linux中shell编程基础语法_第44张图片
  • 布尔运算符
    Linux中shell编程基础语法_第45张图片
  • 逻辑运算符
    Linux中shell编程基础语法_第46张图片
  • 字符串运算符
    Linux中shell编程基础语法_第47张图片
    注:为了防止出错,建议使用[[…]]
    双中括号
  • 文件测试运算符
    Linux中shell编程基础语法_第48张图片
    文件测试运算符2

9 echo

注:echo会自动添加换行

  • 显示字符串
    Linux中shell编程基础语法_第49张图片
  • 显示转义字符
    Linux中shell编程基础语法_第50张图片
  • 显示变量
    Linux中shell编程基础语法_第51张图片
  • 显示换行
    Linux中shell编程基础语法_第52张图片
  • 显示不换行
    Linux中shell编程基础语法_第53张图片
  • 显示结果写入文件
    定向到文件
    注:>>表示追加文件内容,>是删除之前内容重新写入
    Linux中shell编程基础语法_第54张图片
  • 原样输出
    Linux中shell编程基础语法_第55张图片
    Linux中shell编程基础语法_第56张图片
  • 显示运算结果
    Linux中shell编程基础语法_第57张图片

10 printf

  • 基本使用
    Linux中shell编程基础语法_第58张图片
    Linux中shell编程基础语法_第59张图片
    实例说明
  • 引号与多元素情形
    Linux中shell编程基础语法_第60张图片
    Linux中shell编程基础语法_第61张图片
  • 格式符
    Linux中shell编程基础语法_第62张图片
    Linux中shell编程基础语法_第63张图片
  • 转义字符表
    Linux中shell编程基础语法_第64张图片

11 test

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。用法是在test后面接表达式即可。
Linux中shell编程基础语法_第65张图片
Linux中shell编程基础语法_第66张图片

12 选择语句

  • if
    Linux中shell编程基础语法_第67张图片
  • if else
    Linux中shell编程基础语法_第68张图片
  • if else-if else
    Linux中shell编程基础语法_第69张图片
    Linux中shell编程基础语法_第70张图片
    注:条件判断语句常与test一起使用
  • case
    Linux中shell编程基础语法_第71张图片
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C5oTtbcj-1598279613734)(https://upload-images.jianshu.io/upload_images/21516943-36cc3010d71ee6e0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
    Linux中shell编程基础语法_第72张图片

13 循环语句

  • for
    Linux中shell编程基础语法_第73张图片
    Linux中shell编程基础语法_第74张图片
    Linux中shell编程基础语法_第75张图片
    Linux中shell编程基础语法_第76张图片

  • while
    Linux中shell编程基础语法_第77张图片
    Linux中shell编程基础语法_第78张图片
    Linux中shell编程基础语法_第79张图片

  • 无限循环
    Linux中shell编程基础语法_第80张图片

  • until
    Linux中shell编程基础语法_第81张图片
    Linux中shell编程基础语法_第82张图片

  • 跳出循环
    1 break
    Linux中shell编程基础语法_第83张图片
    2 continue
    Linux中shell编程基础语法_第84张图片

14 函数

Linux中shell编程基础语法_第85张图片

  • 不带参数
    1 没有返回值的
    Linux中shell编程基础语法_第86张图片
    2 带返回值的
    Linux中shell编程基础语法_第87张图片
  • 带参数
    Linux中shell编程基础语法_第88张图片
    注:$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。
    Linux中shell编程基础语法_第89张图片
  • 注意事项
    $? 仅对其上一条指令负责,一旦函数返回后其返回值没有立即保存入参数,那么其返回值将不再能通过 $? 获得。
    Linux中shell编程基础语法_第90张图片
    其中第二个$?返回0,代表的是上一条语句“echo $?”,执行没有出错,返回的0。所以在shell中:0 代表 true,0 以外的值代表 false。

15 输入、输出重定向

  • 命令集合
    Linux中shell编程基础语法_第91张图片
  • 输出重定向
    Linux中shell编程基础语法_第92张图片
  • 输入重定向
    Linux中shell编程基础语法_第93张图片
  • 总结:
    Linux中shell编程基础语法_第94张图片
    Linux中shell编程基础语法_第95张图片
    Linux中shell编程基础语法_第96张图片
  • Here Document
    Linux中shell编程基础语法_第97张图片
    实例
    Linux中shell编程基础语法_第98张图片

16 文件调用

Linux中shell编程基础语法_第99张图片
Linux中shell编程基础语法_第100张图片
注:实例中test2.sh调用test1.sh,执行test2.sh时,test1.sh不需要赋予可执行权限。

你可能感兴趣的:(linux,shell)