linux【5】:Shell 编程

一、shell概述

shell 是一个命令行解释器,是外部程序和Linux内核的桥梁,接收用户命令,然后调用 操作系统内核,充当一个翻译官的角色。
在这里插入图片描述

二、shell脚本入门

shell脚本 以 #!/bin/bash 开头,指定解析器,shell脚本文件一般以.sh结尾,但是也可以没有

1、hello world

在这里插入图片描述

2、执行脚本的四种方式

  1. sh 相对路径/.绝对路径
    在这里插入图片描述

  2. bash 相对路径/绝对路径
    在这里插入图片描述

  3. 设置脚本文件有执行的权限后,直接 输入绝对路径或者相对路径执行
    在这里插入图片描述

  4. . / source 文件相对路径或绝对路径
    在这里插入图片描述

前三种方式 是在当前shell中打开一个子shell 执行脚本内容,当脚本内容结束,则 子shell结束,回到父shell中。
第四种 是在当前shell中执行,无需打开子shell。
区别:在环境变量继承的关系上,如果子shell 设置的当前变量,父shell是不可见的

3、创建子shell

命令输入:bash 再执行就是在子bash下执行操作,exit退出当前子shell
在这里插入图片描述

三、变量

1、系统变量

  • env 查看系统变量
    在这里插入图片描述

  • 打印系统变量
    如:echo $PATH
    在这里插入图片描述

  • set | less 分页显示当前shell中所有变量

2、自定义变量

等号左右不能有空格,String 可以用”“

  • 1、定义局部变量
    aa=3 在这里插入图片描述

  • 2、定义全局变量
    将局部变量提升为 全局变量,export 变量名
    如:export a

  • 3、全局变量和局部变量的区别
    全局变量在所有的子shell中都可以获取值,局部变量只能在本shell中获取值
    在这里插入图片描述
    解析: 根据执行脚本的四种方式可知,./执行脚本是创建了一个子shell 去执行脚本,这个时候 new 局部变量在子shell中获取不到值,source 是在本shell中执行脚本,因此他可以获取到new的值,将new 改为全局变量,此时 ./ :子shell执行脚本也是可以拿到变量值的。

  • 4、删除变量 unset 变量名

  • 5、设置静态变量(常量):readonly 变量,不能用 unset
    在这里插入图片描述

  • 6、变量定义规则
    在这里插入图片描述

  • 7、初始变量计算
    由于变量都是默认string类型,不支持数值运算,那么怎么进行变量计算呢
    如下
    在这里插入图片描述

3、特殊变量【参数输入】

  • 1、获取输入的参数:$n
    n 为数字,$0 代表该脚本名称,$1- 9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9 代表第一到第九个参数,十以 上的参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10})
    在这里插入图片描述

  • 2、获取参数个数:$#
    在这里插入图片描述

  • 3、获取全部参数 $* 和 $@
    $*: 所有的参数看成一个整体
    $@:所有参数看成集合中的元素
    在这里插入图片描述

  • 4、获取脚本返回结果:$?
    :最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行,反之,执行错误
    在这里插入图片描述

四、运算符

语法:
$ ((运算式)) 或者 $[运算式]
在这里插入图片描述

五、条件运算

0 真 1 假

1、基础语法

  • 1、test 表达式
    表达式的 = 前后要有空格
    在这里插入图片描述

  • 2、[ 表达式 ]
    表达式前后要有 空格
    在这里插入图片描述

2、判断条件

  • 1、 两个整数之间的比 在这里插入图片描述
    在这里插入图片描述

  • 2、文件权限判断
    在这里插入图片描述在这里插入图片描述

  • 3、按照文件类型判断
    在这里插入图片描述
    在这里插入图片描述

  • 4、多条件判断 [ 表达式 ] && 表达式为真执行 || 表达式为假执行这个
    在这里插入图片描述

六、流程控制

1、if判断

1、单分支
在这里插入图片描述

2、多分支判断
在这里插入图片描述

2、case判断

在这里插入图片描述
注意事项
在这里插入图片描述

3、for循环

在这里插入图片描述
在这里插入图片描述

1、遍历打印输入的每个参数 $* 和 $@ 都代表全部参数集合
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、当 $* 被双引号”“包住时,所有参数会看作一个参数,只会循环一次

在这里插入图片描述
在这里插入图片描述

3、当 $@ 被双引号”“包住时,和没有双引号一个效果,会遍历循环所有参数
在这里插入图片描述
在这里插入图片描述

4、while

从1加到100

在这里插入图片描述

在这里插入图片描述

七、read读取控制台输入


在这里插入图片描述
在这里插入图片描述

八、函数

8.1、系统函数

8.1.1、basename

在这里插入图片描述

8.1.2、dirname

在这里插入图片描述

8.2、自定义函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

九、正则表达式

正则表达式通常被用来检索、替换那些符合某个模式的文本

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十、文本处理工具

1、cut

cut 的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。

在这里插入图片描述
在这里插入图片描述

2、awk

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值