shell脚本

1、什么是shell

什么是shell

Shell(外壳) 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。 Shell 既是一种命令语言又是一种程序设计语言

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

什么是脚本?

脚本简单地说就是一条条的文字命令,这些文字命令是可以看到的(如可以用记事本打开查看、编辑)。

[En]

A script is simply a piece of text commands that can be seen (for example, you can open it with notepad and edit it).

常见的脚本: JavaScript (JS ,前端),VBScript, ASP ,JSP ,PHP (后端),SQL(数据库操作语言),Perl, Shell,python,Ruby,JavaFX,Lua等。

为什么要学习和使用shell

Shell属于内置的脚本

程序开发的效率非常高,依赖于功能强大的命令可以迅速地完成开发任务(批处理)

[En]

Program development is very efficient, relying on powerful commands to quickly complete development tasks (batch processing)

语法简单,代码写起来比较轻松,简单易学

常见的shell 种类?

在linux中有很多类型的shell,不同的shell具备不同的功能,shell还决定了脚本中函数的语法,Linux中默认的shell是 /bin/bash (重点),流行的shell有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特点以及用途。

2、shell入门

编写规范

使用流程:

①创建.sh文件 touch/vim

②编写shell代码

③执行shell脚本 脚本必须得有执行权限

二、shell进阶(重点)

1、变量(重点)

1.1 、变量的含义

a. 什么是量:量就是数据.

b. 什么是变量:数据可以发生改变就是变量.

在一个脚本周期内, 其值可以发生改变的量就是变量.

c. 什么叫做一个脚本周期

一个脚本周期我们可以简单的理解为当前的shell文件。

变量是shell中不可或缺的一部分,也是 最基础、最重要的组成部分。

1.2 、变量的定义与使用(重点)

定义形如:class_name=”yunwe “

使用形如:echo $class_name

注意:变量名后面的等号左右不能有空格

变量名的命名须遵循如下规则

命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。

[En]

Naming can only use letters, numbers and underscores, and the first character cannot start with a number.

中间不能有空格,不能使用标点符号

不能使用bash里的关键字(可用help命令查看保留关键字)。

关于单双引号的问题:

双引号能够识别变量,双引号能够实现转义(类似于”* “)

单引号是不能识别变量,只会原样输出,单引号是不能转义的

注意: 当在脚本中需要执行一些指令并且将执行的结果赋给变量的时候需要使用”反引号” (esc 键下方的那个键) 。

1.3、只读变量(了解)

语法:readonly 变量名

案例:定义变量a并且其值为10,随后设置其为只读变量,再去尝试重新赋值

1.4 、接收用户输入(重点)

语法:read -p 提示信息 变量名

案例:编写一个脚本test6.sh,要求执行之后提示用户输入文件的名称(路径),然后自动为用户创建该文件

1.5、删除变量(了解)

语法:unset 变量名path

案例:定义变量b=20,再输出b的值,随后删除b,最后再输出下b

2、条件判断语句

语法1(一个条件):

if condition

then

command1

command2

fi

单行写法(一般在命令行中执行的时候):if [ condition ]; then command; fi

语法2(两个条件):

if condition1

then

command1

elif condition2

then

command2

else

commandN

fi

3、运算符

在shell中,运算符和其他编程脚本语言一样,常见的有算数运算符、关系运算符、

逻辑运算符、字符串运算符、 文件测试运算符

3.1 、算数运算符

常用的算术运算符:

注意:

条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]

表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2

完整的表达式要被 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

3.2、关系运算符

关系运算符只支持数字,不支持字符串 ,除非字符串的值是数字

下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:

shell脚本

-eq:equal

-ne:not equal

-gt:great than

-lt:less than

-ge:great than or equal

-le:less than or equal

3.3、逻辑运算符

下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:

shell脚本

或运算:一个为真即为真,全部为假才是假

与运算:一个为假即为假,全部为真才是真

3.4、字符串运算符

下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:

shell脚本

3.5、文件测试运算符(重点)

文件测试运算符用于检测 Unix/Linux 文件的各种属性。

属性检测描述如下:

shell脚本

注意:权限几个判断,如果只有一个部分符合,则认为是有权限的。

4、shell脚本附带选项(重点)

问题描述:在linux shell中如何处理tail -10 access.log这样的命令行选项?

步骤:

调用tail指令

系统把后续选项传递给tail

Tail先去打开指定的文件

取出最后10行

问题:自己写的shell是否也可以像内置命令一样传递一些选项呢?

答:可以的,传递方式与上述的描述是一样的,关键是怎么接收。

例如:

传递:

./test.sh a b c

接收:

在脚本中可以用”$1″来表示a,”$2″来表示b,以此类推。

接收可以用”$ “加上选项对应的序号即可。

Original: https://www.cnblogs.com/komorebiZjh/p/16029956.html
Author: 搁浅的小鲸鱼
Title: shell脚本

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/72088/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 你喜欢哪款 Linux 桌面?萝莉风?御姐风?

    我知道你们都不是妹子,但你们的电脑是。今天给你们可爱的 Linux 推荐6件超级好看的花花裙子,萝莉风、御姐型、科技感、纯朴风,看上哪件选哪件,开始启动程序员逛街模式吧! 一、Ad…

    Linux 2022年8月26日
    0136
  • 《只是为了好玩:Linux之父林纳斯自传》

    《只是为了好玩:Linux之父林纳斯自传》 基本信息 作者: (美)Linus Torvalds David Diamond 译者: 陈少芸 出版社:人民邮电出版社 ISBN:97…

    Linux 2022年8月24日
    0135
  • ssh remote forward 监听 0.0.0.0 端口;How to make SSH remote port forward that listens 0.0.0.0

    今天使用ssh转发内网服务的时候,发现remote forward 转发到远程,监听的端口都是localhost。 之前还没发现这种情况,因为都是在所转发的目的主机使用服务。今天,…

    Linux 2022年9月10日
    084
  • ubuntu-安装teamviewer和向日葵

    teamviewer:1、官网下载安装包https://www.teamviewer.com/zhcn/download/linux/在下载文件夹中 2、安装执行命令: sudo …

    Linux 2022年8月26日
    0147
  • Linux系统产生随机数/dev/random 和 /dev/urandom

    1. 基本介绍 /dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流。很多解密程序与安全应用程序(如…

    Linux 2022年8月20日
    0170
  • 关于博客的解读

    写在前面 大家好,这里是满满! 最近也是想来写博客,我们学习过后的知识一旦过一段时间后,自然会有一些只是会遗忘,这时候大家都会去翻看以前的视频 ,笔记,遇到难一点的问题,可能就会去…

    Linux 2022年11月7日
    096
  • Redis主从复制

    一、主从复制 1、redis为什么还要主从复制? 和Mysql主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支…

    Linux 2022年9月14日
    0125
  • JuiceFS 新手必知 24 问

    JuiceFS 是一个创新性的软件产品,很多初次尝试的小伙伴对产品和用法感到很多疑惑,所以为了帮助大家快速理解并上手 JuiceFS,我们整理了24个关于 JuiceFS 经典的问…

    Linux 2022年11月8日
    0100
  • Linux(CentOS7)安装Docker,镜像拉取、使用及常用操作

    一、简介 Docker是一个开源的应用容器引擎;是一个轻量级容器技术; Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使 用…

    Linux 2022年8月13日
    0178
  • 从前端走向后端

    每次回老家过年,我都会遇到陌生的亲友,经常被问到我的职业是什么。起初,我总是认真地回答这个问题,这往往会导致一个尴尬的问答。 [En] Every time I go back t…

    Linux 2022年10月15日
    0140
  • 聊聊消息中心的设计与实现逻辑

    厌烦被消息打扰,又怕突然间的安静; 一、业务背景 微服务的架构体系中,会存在很多基础服务,提供一些大部分服务都可能需要的能力,比如文件管理、MQ队列、缓存机制、消息中心等等,这些服…

    Linux 2022年11月7日
    091
  • QtCreator 常用快捷键

    介绍 QtCreator 软件的常用快捷键。 一、单键快捷键 快捷键 含义 打开帮助手册 在函数声明与实现之间切换 在 cpp 和 .h 文件切换 二、Ctrl组合快捷键 快捷键 …

    Linux 2022年8月24日
    0142
  • Java中如何遍历Map对象的4种方法

    这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。 Map<integer, integer> map = new HashMap<inte…

    Linux 2022年8月11日
    0101
  • linux批量执行工具omnitty安装及使用

    在生产环境中,可能会有多台linux主机,运维人员可能会对多台主机进行同样的操作,例如:同时在多台主机上添加一个user用户或者查看所有主机的硬件信息,如果没有批量操作工具,设备少…

    Linux 2022年8月11日
    0216
  • Linux内核的Oops【转】

    什么是Oops?从语言学的角度说,Oops应该是一个拟声词。当出了点小事故,或者做了比较尴尬的事之后,你可以说”Oops”,翻译成中国话就叫做”…

    Linux 2022年8月24日
    0136
  • linux vim自定义1

    1.新建/.vim文件夹 2.编辑vimrc文件 内容如下: 解释如下: 第1和15行,按空格+Enter后取消搜索高亮 第2行,设置行号 第7行,搜索字符 第8行,搜索字符是忽略…

    Linux 2022年8月24日
    081
最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总