什么是shell?shell在Linux内怎么编写脚本?

news2024/12/23 12:26:24

目录

一、概念

二、简单创建脚本

三、shell语法

1.变量

2.环境变量

3.参数变量

4.条件

 5.控制结构

if语句

  elif语句

for语句


一、概念

什么是shell?

        shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令。

        下图显示了shell(实际上是两种shell:bash、csh)和其他程序环绕在Linux内核的四周。

         在大多数Linux发行版中,默认的shell程序/bin/sh实际上是对程序/bin/bash的一个连接。可以使用如下命令来查看bash的版本号

$ /bin/bash --version

        如果想要切换到另一个shell(例如,bash不是你的系统中默认的shell ),你只需直接执行需要的shell程序(例如,/bin/bash)就可以运行新的shell并且改变命令提示符了。

二、简单创建脚本

1.创建脚本的后缀名为.sh

2.执行"./my.sh"系统发现是脚本文件后会帮助我们启动bash,达到和"bash my.sh"一样的结果

3.书写shell的规则与含义

        如下是一个简单的shell编程,第一行是执行绝对路径下的bash,如果没有写系统会认为是默认的系统解释器,第3行是输出“hello shell”的内容,第5行exit命令的作用是保证脚本程序能够返回一个有意义的退出码。

  • 程序中的注释是以#符号开始,一直持续到该行的结束。但是第一行#!是特殊形式的注释,是告诉系统同一行上紧跟在他后面的那个参数是用来执行文本文件的程序。

        下例是键盘输入并输出值显示。第3行是提示符输入,第4行是从键盘读取数据给line,第6行是printf输出line值。($的含义在下面第三板块变量内讲解)

         如果想要换行的话,应加入\n,如下所示:

 

三、shell语法

        在本小结内包含了一下重要内容:

  • 变量:字符串、数字、环境和参数
  • 条件:shell中的布尔值
  • 程序控制:if、elif、for、while、until、case
  • 命令控制
  • 函数
  • shell内置命令
  • 获取命令的执行结果
  • here文档

1.变量

一些规则:

  • 并不需要事先声明变量,只用在要使用是创建即可
  • 默认情况下,所有变量都被看作字符串并以字符串来存储,例如下图中第3行的""并不一定是字符串的存储。
  • “”在脚本中是弱引用。如上图第四行中"hello $a"输出是hello 100,第5行的s="hello 100"
  • 单引号‘’是原样输出,例如‘hello $a’输出就是hello $a
  • 大小写仍是被区分的
  • 要访问变量的内容需要在前面加$符号,例如$a,就是取a的值
  • 变量赋值是对空间的指向。例如,a=100不是说在a的空间内存放100,而是让a指向100所在的空间
  • 如果字符串内包含空格,就必须用引用把他们括起来。
  • 等号两边不能有空格,如有有空格就代表判等的含义了

2.环境变量

        当一个shell脚本程序开始执行时,一些变量会根据环境设置中的值来进行初始化。这些变量通常用大写字母做名字,以便把他们和用户脚本程序里定义的变量区分开来,后者按惯例都用小写字母做名字。

下图是系统使用手册中列举的环境变量。

        下图举例,输出参数变量hello 123,其中命令$1 ->第一个变量;$2 ->第2个变量,而对于第三个变量没有,所有$3输出为空。

        如下示例对一级提示符修改为“^_^”:

        恢复输入下面命令:

3.参数变量

参数变量表如下所示:

         除了使用echo命令来查看变量内容外,还可以使用read命令来读取

4.条件

test或[命令

        shell内bool布尔判断命令使用[或test。[在使用时还需要符号]结尾。

        test命令可以使用条件类型归为3类:字符串比较、算术比较和文件有关的条件测试,如下图所示:

 5.控制结构

if语句

        这个要结合上面条件讲的内容一起使用,使用规则如下:

if condition
then
    statements
else
    statements
fi

  elif语句

        和else if相同用法,但是在shell内与if遵守相同规则

下面是一些具体的示例

 判断文件的类型:

         此处,也体现了脚本文件的好处,如果用C语言去写势必更加复杂化。

对成绩进行判断等级示例:

echo "input"
read grade

if [ "$grade" -gt 100 || "$grade" -lt 0]
then 
        echo "error!\n"

if [ "$grade" -ge 80]
then 
        echo "A"
elif [ "$grade" -ge 70]
then 
        echo "B"
elif[ "$grade" -ge 60]
then 
        echo "C"
else
        echo "D"
fi

for语句

        我们可以使用for结构来循环处理一组值,这组值可以是任意的字符串集合。下面是它的语法:

for variable in values
do
    statements
done

        示例:

 

        补充在脚本中对命令的使用,例如想要通过"ls"去输出当前路径下的文件内容然后赋值给str,但是直接str=ls这样的话,str的值是ls,并不是ls代表路径下的一系列文件。

        此时,需要用“$()”或者“``”反引号去识别命令,如下就能得到我们想要的结果

        也可以用for语句输出

 

内容暂时先到这里,剩下的下周补齐~

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

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

相关文章

kali之setoolkit使用

kali之setoolkit使用 1 搭建钓鱼网站 钓鱼网站是黑客常用的用于盗取目标用户名与账号的方式,今天主要介绍setoolkit来制作钓鱼网站 setoolkit是kali下的社会工程学工具集。 ①进入setoolkit 命令行输入: setoolkit②选择社会工程学攻击 - 网络攻击 - …

基于Android的二手车交易系统

需求信息: 1、登录功能:用户可以注册登录,管理员可以给销售人员权限,所以销售人员只能登陆。 2、维护车辆信息:主要实现的是客户添加修改查询删除车辆信息,然后发布车辆需要提交,提交给管理员,管理员审核了…

四、Executor执行器【无标题】

Executor Executor 接口定义了数据库操作的基本方法,其中 query*() 方法、update() 方法、flushStatement() 方法是执行 SQL 语句的基础方法,commit() 方法、rollback() 方法以及 getTransaction() 方法与事务的提交/回滚相关,clearLocalCac…

Python快速入门

最近在很多地方都可以看到Python的身影,尤其在人工智能等科学领域,其丰富的科学计算等方面类库无比强大。很多身边的哥们也提到Python非常的简洁方便,比如用Django搭建一个见得网站只需要半天时间即可,因此也吸引了我不小的兴趣。…

二叉树:删除二叉搜索树中的节点

删除二叉搜索树中的结点 一、题目描述 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除…

2023牛客寒假算法基础集训营5(通过ABCDHIKL) I题有详解(F已补)

其他题待补中…… 链接:2023牛客寒假算法基础集训营5 简单题 A 小沙の好客(贪心,前缀和,二分) 题意思路 给定nnn个商品的价值,qqq次询问,每次询问k,xk, xk,x即价值不超过xxx的商品最多可以拿…

文件输入输出缓冲流IO综合练习——学生管理系统文件版

综合练习(一) 键盘录入3个学生信息(学号,姓名,年龄,居住城市)存入集合。然后遍历集合把每一个学生信息存入文本文件(每一个学生信息为一行,自己定义分割标记) 学生类: package com.itheima; /** 标准的学生类*/ public class St…

【数据结构 (3)】1.4 算法和算法分析

文章目录1. 算法的定义及特性算法的特性算法设计的要求2. 算法的时间复杂度分析算法时间复杂度的基本方法算法时间复杂度分析例题算法时间复杂度的计算3. 算法的空间复杂度1. 算法的定义及特性 算法的定义 对特定问题求解方法和步骤的一种描述,它是指令的有限序列…

WSL-Ubuntu 安装、移动

设置” 启用或者关闭Windows功能“,勾选如下选项。Hyper-v若存在灰色,可进入BIOS-Configuration,Intel Virtual Technology设置Enable重启2、安装Ubuntu3、移动。Ubuntu默认安装C盘。首先D盘创建移动的目录,例如:D:\Ub…

使用kubeadm搭建高可用k8s集群

使用kubeadm搭建高可用k8s集群方案选型高可用k8s集群部署准备工作服务器统一配置配置hostname打通ssh免密登录部署etcd集群step1 在master01上生成配置相关文件step2 每台服务器上启动etcd服务step3 检查etcd集群是否正常部署负载均衡 (haproxy keepalived)step1 下载haproxy与…

SAP 分析云 2023.012023.02 版新功能抢先看

大家新年好呀!本年度的第一篇推文来啦~本文介绍了SAP 分析云2023.01&2023.02 版本的新功能。这些新功能已经在SAP 分析云FastTrack 客户的系统上线。对于 SAP 分析云季度发布周期 (QRC) 客户,此版本及其功能将作为 QRC 2023 年第1季度版本的一部分提…

[Android开发基础3] Activity的生命周期、创建与配置

文章目录 生命周期 概念 生命周期周期函数 创建Activity 方法一:编译器自动创建与配置 方法二:手动创建与配置 生命周期 概念 生命周期,顾名思义,就是当前的程序单元Activity从启动到销毁之间一系列所经过的状态。 生命周期周…

怎么画室内导航地图,室内地图绘制工具

现在很多楼宇建的越来越大,停车场、商场、展览馆、博物馆、交通枢纽等大型室内场景规模巨大、环境复杂,人们置身其中,一不小心就走错方向,从而多走很多弯路,费时费力。室内导航一直是导航场景的一大难题,如…

【redis6】第十四章(Redis集群)

问题 容量不够,redis如何进行扩容? 并发写操作,redis如何分摊? 另外,主从模式,薪火相传模式,主机宕机,导致ip地址发生变化,应用程序中配置需要修改对应的主机地址、端…

什么是Go语言?

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注! 作者|慕课网精英讲师 Codey 1. Go 语言的出身 Go(又称 golang)是 Google 开发的一种静态强类型、编译型、并发型,并具…

OpenMMLab AI实战课笔记-第1节课

1. 第一节课(课程链接) 1.1 计算机视觉任务 计算机视觉主要实现以下目标: 分类目标检测分割:语义分割、实例分割 (对像素进行精确分类, 像素粒度或细粒度)关键点检测 1.2 OpenMMLab框架 框架选择:PyTorchOpenMML…

多级缓存案例说明

多级缓存案例说明1.安装MySQL1.1.准备目录1.2.运行命令1.3.修改配置1.4.重启2.导入SQL3.创建Demo工程3.1.分页查询商品3.2.新增商品3.3.修改商品3.4.修改库存3.5.删除商品3.6.根据id查询商品3.7.根据id查询库存3.8.启动4.创建商品查询页面4.1.运行nginx服务4.2.反向代理为了演示…

CSS网格教程:网格布局模块/网格容器/网格项目

目录 CSS 网格布局模块 网格布局 浏览器支持 网格元素 实例 Display 属性 实例 实例 网格列(Grid Columns) 网格行(Grid Rows) 网格间隙(Grid Gaps) 实例 实例 实例 实例 网格行&#xff0…

java基础面试题1

目录 Java语言有哪些特点 Java都有那些开发平台? Jdk和Jre和JVM的区别【重要】 面向对象和面向过程的区别 什么是数据结构?Java的数据结构有哪些? 1.数组: 2.队列 Queue 3.链表 Linked List 4.栈Stack 5.树Tree 什么是…

13薪|初级测试工程师

"众推职聘”以交付结果为宗旨的全流程化招聘服务平台!今日招聘信息↓【工作内容】1、制定、编写软件测试方案与计划2、根据需求文档编写测试用例,组织测试用例评审3、按时完成软件测试工作任务,执行测试,跟踪缺陷状态&#x…