C04S01-Shell编程基础

一、Shell

1. Shell概述

Shell是用户和计算机内核交互的中间人,能够把用户的指令转为计算机能够识别的二进制语言将内核的计算结果转为人类所熟悉的语言,也就是命令解释器。

Shell有很多种,Linux系统常见的Shell命令解释器包括:

  1. BASH:Linux系统当前的主流命令解释器。
  2. SH:原先的命令解释器,被BASH所替代。
  3. CSH:类C语言的Shell。
  4. TCSH:相当于CSH的升级版。
  5. NOLOGIN:一种禁止用户登录的Shell。

Shell脚本是一种描述语言,脚本语言是解释执行的,也就是说不需要编译Shell脚本,可以直接在系统中通过命令解释器运行。允许用户通过编写一系列可执行的命令来控制计算机的行为,实现系统命令和系统程序的自动化。

2. Shell基本语法

2.1 Shell脚本基本格式

在Linux系统中,一切皆文件。但是为了方便辨识文件,Shell脚本的后缀名是.sh。下面是Shell脚本的基本格式:

#! /bin/bash# 执行语句
  • #! /bin/bash:指定脚本的解释器,可以不设置。默认的就是系统所使用的命令解释器。
  • 在Shell脚本中,#表示注释,执行脚本不会被执行。

2.2 Shell脚本的运行

  1. 调用解释器来运行脚本。

    bash test.sh
    
  2. 设置脚本文件的权限,从而直接运行。

    chmod 777 test.sh
    ./test.sh # 执行当前目录下的test.sh脚本
    
  3. 使用source命令运行脚本。

    source test.sh
    
    • source会读取指定的 Shell 程序文件,并且直接在当前的Shell环境中依次执行其中所有的语句。

      而前面两种运行方式,是在子Shell环境中执行,不会影响当前Shell。

  4. 通过定时任务运行脚本。

二、重定向

在Linux中,重定向是一种改变标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)流方向的操作。默认情况下,标准输入流来自键盘,标准输出和标准错误输出流显示在屏幕上。通过使用重定向操作符,可以将这些流重定向到文件或其他命令。

Linux的文件描述符中, 0 表示标准输入,1 表示标准输出,2 表示标准错误输出。

1. 输入重定向(<)

将文件内容作为标准输入传递给命令。

命令 < 文件

2. 输出重定向(>)

将命令的标准输出重定向到文件中。如果文件不存在,会创建该文件;如果文件已存在,内容会被覆盖。

命令 > 文件

3. 追加重定向(>>)

将命令的标准输出追加到文件末尾。如果文件不存在,会创建该文件;如果文件已存在,新内容会添加到文件末尾,而不是覆盖原有内容。

命令 >> 文件

4. 错误重定向(2>)

将命令的标准错误输出重定向到文件中。

命令 2> 文件

5. 错误追加重定向(2>>)

将命令的标准错误输出追加到文件末尾。

命令 2>> 文件

6. 同时重定向标准输出和标准错误输出(&>)

将标准输出和标准错误输出都重定向到同一个文件。

命令 &> 文件

7. 同时追加标准输出和标准错误输出(&>>)

将标准输出和标准错误输出都追加到同一个文件的末尾。

命令 &>> 文件

三、变量

1. 变量概述

变量是一个可以变化的量,就像一个容器,可以保存不同类型的数据。每个变量都有一个唯一的名称,也就是变量名。变量分为默认变量和自定义变量,默认变量是系统定义好的,一般情况是不能修改的;自定义变量是用户自定义的,自定义变量名有以下注意事项:

  • 不要使用命令当作变量名称。
  • 不要使用中文。
  • 不要使用特殊符号开头,下划线除外。
  • 只能字母或者下划线开头,数字不能开头。
  • 尽量使用有具体含义的英文来定义变量,提高可读性。

常见的变量数据类型:

  • 字符串(String)类型:通常用引号包围。
  • 整数(Int)类型:存储整数,没有小数部分。
  • 布尔(Boolean)类型:true或false,表示真或假。

2. 变量引用

在 Shell 中,用户可以通过在变量名前面加上$来获取该变量的值。除此之外,在Shell中,有三种引号:单引号、双引号和反引号。

  • 单引号:括起来的字符都作为普通字符出现,属于强引用。
  • 双引号:括起来的字符,除$、\、'、"等特殊字符保留特殊功能外,其他的都是普通字符,属于弱引用。
  • 反引号:括起来的字符会被Shell当作是命令。

3. read – 读取单行数据内容

read命令的功能是用于读取单行数据内容,一般是从标准输入中读取数值,用于给变量赋值。在Shell脚本中,可以使用这个命令来实现从键盘读取用户所输入的值。

read [选项] 变量

常见的选项:

选项功能
-p设置提示信息

4. 变量的种类

在Shell脚本中,根据不同分类方法,变量可以被分为多种。以下是常见的变量:

  • 全局变量:在任何地方都可以调用的变量,直接赋值的变量就是全局变量。
  • 局部变量:只能在一定范围内调用的变量,需要使用local声明定义。
  • 环境变量:属于特殊的全局变量,由操作系统或用户设置。可以使用export声明定义。
  • 位置变量:用于接收传递给脚本的参数的变量,$1、$2、$3等,其中$1是第一个参数,$2是第二个参数,依此类推。
  • 预定义变量:命令解释器设置的变量。
    • $*:所有的位置参数,将所有参数视为一个整体。
    • $@:所有的位置参数,每个参数被视为单独的个体。
    • $#:递给脚本的位置参数个数。
    • $?:上一次执行命令的返回码(退出状态,也就是命令是否执行成功)。返回码分为0和非0,0表示执行成功,非0表示执行失败。

四、Shell运算

1. 运算符

在Shell脚本中,常见的运算符包括:加法(+)、减法(-)、乘法(*)、除法(/)、取余(%)。

2. 整数运算

  1. (())

    只能进行整数运算,基本格式如下所示。

    ((运算表达式))
    
    • 可以使用$来调用运算的结果。
    • 调用变量可以不使用$,(())会自动解析。

    示例:

    ((a=1+1))
    echo $a #2echo $((1+2)) #3
    
  2. expr

    基本格式如下所示。

    expr 变量 运算符 变量
    
    • 变量(数值)和运算符之间要有空格。
    • 调用运算结果可以使用$()或者反引号。
    • 使用*进行乘法运算时需要加上反斜杠,否则Shell会认为是通配符。

    示例:

    expr 1 + 2 #3a=$(expr 1 + 2)
    echo $a #3b=`expr 5 + 4`
    echo $b #9
    
  3. let

    基本格式如下所示。

    let 变量=运算表达式
    

    示例:

    let a=1+2
    echo $a #3
    
  4. $[]

    基本格式如下所示。

    $[运算表达式]
    
    • 与(())不同,不能在括号内将运算结果赋值给变量。

    示例:

    a=$[1+2]
    echo $a #3
    

3. 小数运算

  1. bc

    bash默认不支持小数运算,因此引入bc来实现小数计算。基本格式如下所示。

    echo 运算表达式 | bc
    
    • bc默认是整数运算,要进行小数运算还需要设置精确位数。
    • 调用运算结果可以使用$()或者反引号。

    示例:

    # 设置结果的精确位数是2
    echo $(echo "scale=2;9/2" | bc)
    
  2. awk

    基本格式如下所示。

    awk "BEGIN{print 运算表达式}"
    

    示例:

    awk "BEGIN{print 9/2}" #
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19253.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

GRPC实现

1.首先下载对应编译插件&#xff0c;这里不再提供下载 2.编写proto文件 3.编写完成用命令生成go文件 protoc --go_out. --go-grpc_out. *.proto --go_out. 其中的. 是说你要编译的 .proto 文件目录为当前目录&#xff0c;按需修改 --go-grpc_out.&#xff0c;其中的. 是说你生…

Path does not exist: file:/D:/pythonProject/spark/main/datas/input/u.data

出现标题中的错误原因可能是&#xff1a; 1.文件路径书写错误&#xff1b; 2.文件本身不存在。 从图中可以看出&#xff0c;数据源文件是存在的&#xff0c;但是读取不到文件&#xff0c;说明代码中的文件路径写错了&#xff0c;从报错的结果可以看出&#xff0c;python在D:/…

Wallpaper壁纸制作学习记录01

导入图像 打开wallpaper软件&#xff0c;找到下方的播放列表&#xff0c;选择壁纸编辑器。 弹出下列界面&#xff0c;在创建壁纸处可以选择图片拖入。 在开始导入任何图像之前&#xff0c;请首先确保主背景图像表示实际屏幕分辨率。展示示例图像是 1920 x 1080&#xff0c;这…

【知识科普】统一身份认证CAS

什么是CAS 综合概述一、CAS概述二、CAS的组成与工作原理三、CAS的特性与支持四、CAS的应用场景 示例展示场景设定CAS认证过程 其他认证细节CAS认证过程的细节CAS认证过程的特性 参考文献 综合概述 统一身份认证CAS&#xff08;Central Authentication Service&#xff09;&…

计算机网络-MSTP工作原理

前面大致学习了MSTP基础概念与组成&#xff0c;今天来了解MSTP的工作原理。 一、MSTP拓扑计算&#xff1a; MSTP可以将整个二层网络划分为多个MST域&#xff0c;各个域之间通过计算生成CST&#xff0c;域内生成IST&#xff0c;CST和IST构成了整个交换设备网络的CIST。 域内还可…

面试题:Kafka(一)

1. Kafka如何保证消息不丢失 生产者发送消息到Brocker丢失 设置异步发送 消息重试 消息在Brocker中存储丢失 发送确认机制acks 消费者从Brocker接收消息丢失 Kafka 中的分区机制指的是将每个主题划分成多个分区&#xff08;Partition&#xff09;topic分区中消息只能由消费者…

odoo 创建应用

1、通过手脚架命令创建文件结构&#xff08;完全可以手动一个个文件/文件夹建&#xff09; odoo-bin scaffold <模块名> <模块放置路径> 在odoo根目录路径执行命令行&#xff1a;./odoo-bin scaffold my_library exte_addons 执行结果&#xff1a; 参考文章&…

十四、SpringMVC的执行流程

文章目录 1. SpringMVC常用组件2. DispatcherServlet初始化过程3. DispatcherServlet调用组件处理请求4. SpringMVC的执行流程 1. SpringMVC常用组件 2. DispatcherServlet初始化过程 3. DispatcherServlet调用组件处理请求 4. SpringMVC的执行流程

java基础概念30:常见API-System

一、System工具类的常用方法 System也是一个工具类&#xff0c;提供了一些与系统相关的方法。 计算机的时间原点:1970年1月1日0:0:0&#xff0c;我国在东八区&#xff0c;有8小时时差。 二、常用方法说明 2-1、System.exit()方法 该方法用于终止当前运行的Java虚拟机&#x…

基于AOA算术优化的KNN数据聚类算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于AOA算术优化的KNN数据聚类算法matlab仿真。通过AOA优化算法&#xff0c;搜索最优的几个特征数据&#xff0c;进行KNN聚类&#xff0c;同时对比不同个数特征下…

三维测量与建模笔记 - 点特征提取 - 4.3 Harris特征点

在3D重建应用中&#xff0c;很重要的一个场景是找到两幅图像中的同名特征点&#xff0c;这个过程需要对特征点进行提取和描述。 从上面描述可以看出&#xff0c;如果窗口处于颜色变化不明显或者没有变化的区域&#xff0c;E的值很小或为0&#xff1b;如果窗口处于边缘位置&…

labview使用报表工具从数据库导出数据

之前写了一篇labview从数据库导出数据到excel电子表格&#xff0c;但是是基于调用excel的activeX控件&#xff0c;有时候会有一些bug&#xff0c;就比如我工作机就无法显示方法&#xff0c;后面大哥指点才知道没有的原因是excel安装不完整。像我的工作机就没有这个选项。就需要…

WIFI-TTL透传模块说明书

WIFI-TTL透传模块说明书 V 1.0 2022-11-24 目录 1 简介... 4 2 模块参数... 4 3 接口定义... 5 4 设备配网... 6 5 AT指令... 11 6 恢复出厂... 12 7 设备配置... 13 7.1 配置界面说明... 13 7.2 TTL串口配置... 13 7.3 …

基于YOLOv8深度学习的智慧交通非机动车驾驶员头盔佩戴检测系统

随着智慧交通系统的快速发展和城市交通的日益复杂化&#xff0c;非机动车驾驶员的安全问题引起了广泛关注&#xff0c;尤其在发生交通事故时&#xff0c;佩戴头盔作为基础的保护措施&#xff0c;能够有效降低头部受伤的风险&#xff0c;保障非机动车驾驶员的生命安全。然而&…

Flutter踩坑:原生安卓页面向Flutter通信

Flutter踩坑&#xff1a;原生安卓页面向Flutter通信 前言 在 Flutter APP 的开发过程中&#xff0c;有时不仅需要使用 Flutter 提供的组件&#xff0c;还需要使用原生的组件。 例如在对接外部 SDK 时&#xff0c;如果自己重新实现 SDK 的逻辑&#xff0c;无疑是本末倒置。 前…

w043基于springboot的“衣依”服装销售平台的设计与实现

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0…

【计算机网络安全】湖北大学-mysql事务隔离性实验

参考数据库实验&#xff1a;并发控制实验&#xff08;MySQL&#xff09;-CSDN博客&#xff0c;大佬写的很好 实验环境 实验需要mysql环境&#xff0c;如果我们本机有mysql客户端&#xff0c;或者安装过phpstudy都可以直接用&#xff0c;Kali似乎也有。 本机启动phpstudy&…

UE5 猎户座漂浮小岛 08 构造脚本

视频教程 90后小陈老师的个人空间-90后小陈老师个人主页-哔哩哔哩视频 1.构造脚本 1.1 简介 类似构造函数代码创建多个效率高 1.2 添加静态网格体 1.3 散乱立方体 使用for循环生产10个立方体 随机位置生成10个散乱的立方体 1.4 整齐立方体 1.5 随机物体 1.6 样条实现曲度墙…

OpenHarmony-2.DeviceInfo适配

DeviceInfo适配说明 1.启动子系统设备信息说明 2.OHOS 2.1.OHOS 固定值参数适配 OHOS 固定值参数: const.ohos.version.security_patch const.ohos.releasetype const.ohos.apiversion const.ohos.fullname适配说明&#xff1a; OHOS 固定值参数由OHOS系统填充&#xff0…

【电机控制】数学——微分

【电机控制】数学——微分 文章目录 [TOC](文章目录) 前言一、导数二、梯度三、▽算子四、散度四、旋度五、积规则a.函数求导1、函数之和求导2、函数与常数求导3、两个函数乘积求导4、一个函数除以一个函数求导 b.矢量函数求导1.构造标量2.构造矢量 c.梯度求导d.散度求导e.旋度…