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)

语法简单,代码编写简单,易学易学。

[En]

The syntax is simple, and the code is easy to write and easy to learn.

常见的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.

中间没有空格,没有标点符号。

[En]

No spaces in the middle, no punctuation.

不能使用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中,运算符和其他编程脚本语言一样,常见的有算数运算符、关系运算符、

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

[En]

Logical operator, string operator, * file test operator * , etc.

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是否也可以像内置命令一样传递一些选项呢?

答:是的,送货方式和上面描述的一样,关键是如何接收。

[En]

A: yes, the delivery method is the same as the above description, the key is how to receive it.

例如:

传递:

./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/523984/

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

(0)

大家都在看

  • 从零开始制作一个linux iso镜像

    一、前言 对于一个极简化的linux系统而言,只需要三个部分就能组成,它们分别是一个linux内核、一个根文件系统和引导。以下是本文制作linux iso镜像所用到的系统和软件: …

    Linux 2023年5月27日
    093
  • 1-Django2.2安装指南

    django快速安装指南 作为一个Python Web框架,Django需要Python环境。下面是Django需要对应的python版本。Django版本python版本1.11…

    Linux 2023年6月7日
    0132
  • 统计算法_概率基础

    本次有以下函数 1、简单边际概率 2、联合概率 3、条件概率 4、随机变量期望值 5、随机变量方差 6、随机变量协方差 7、联合协方差 8、组合期望回报 9、投资组合风险 说概率前…

    Linux 2023年6月6日
    093
  • Redis 常用五种数据类型编码

    1.String 1.1 常用命令 (1)设置值 set key value [ex seconds] [px milliseconds] [nx|xx] set命令有几个选项: …

    Linux 2023年5月28日
    099
  • podman无根用户基本设置和使用

    在允许没有root特权的用户运行Podman之前,管理员必须安装或构建Podman并完成以下配置 cgroup V2Linux内核功能允许用户限制普通用户容器可以使用的资源,如果使…

    Linux 2023年6月13日
    090
  • source insight4.0最常用到的设置

    1、常用功能 1.1:全局查找 1.2:当前文件查找 1.3:高亮设置 1.4:配置字体以及其他 1.5:配置自动缩进 1.6:其他 1. 常用功能 全局查找 Ctl+/ 查找到的…

    Linux 2023年5月27日
    0136
  • redis压力测试【转】

    本文转自: https://segmentfault.com/a/1190000015571891 redis自带的redis-benchmark工具 Redis 自带了一个叫re…

    Linux 2023年5月28日
    075
  • CentOS下配置NTP时间服务器

    配置ntp.conf [root@server ~]# vim /etc/ntp.conf For more information about this file, see th…

    Linux 2023年6月13日
    0114
  • Redis 事务

    一、概述 和传统关系型数据库一样,Redis 同样是支持事务的。Redis 的事务可以通过 MULTI/EXEC/DISCARD/WATCH 等命令来实现。 二、事务的 ACID …

    Linux 2023年5月28日
    0103
  • 如何在 python 中解决 ImportError: DLL load failed while importing win32api

    问题描述 安装完 pywin32 之后,如果直接在代码中 import win32api 可能会报下述错误: ImportError: DLL load failed while …

    Linux 2023年6月7日
    089
  • TCP/IP方法安装打印机

    在计算机安装打印机驱动和添加打印机 (TCP/IP 方法 ) 一:打印机的型号和驱动。 1.1 :如何知道自己的打印机是什么品牌和型号?: 通过观察打印机表面的logo 或者其他文…

    Linux 2023年6月13日
    0126
  • springboot整合redis-sentinel支持Cache注解

    一、前提 已经存在一个redis-sentinel集群,两个哨兵分别如下: /home/redis-sentinel-cluster/sentinel-1.conf port 26…

    Linux 2023年5月28日
    091
  • requests模块

    掌握 headers参数的使用 掌握 发送带参数的请求 掌握 headers中携带cookie 掌握 cookies参数的使用 掌握 cookieJar的转换方法 掌握 超时参数t…

    Linux 2023年6月8日
    0118
  • Docker安装mysqli扩展和gd扩展

    Docker安装mysqli扩展 官方php镜像 docker exec -it php-fpm bash cd /usr/local/bin ./docker-php-ext-i…

    Linux 2023年6月13日
    071
  • 3.20 什么是环境变量,Linux环境变量有哪些?

    变量是计算机系统用于保存可变值的数据类型,我们可以直接通过变量名称来提取到对应的变量值。在 Linux 系统中,环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录(…

    Linux 2023年6月7日
    0107
  • WEBSHELL-恶意代码检测

    静态查杀 提取特征写成规则库,调用规则库查杀。基于规则,会比较快,但漏报、误报会比较明显,一般的Webshell一句话木马变形混淆会比较多。 yara规则 $eval = /(&l…

    Linux 2023年5月28日
    0131
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球